私のプラグインでは、私はこの文を持っています
add_filter( 'comment_edit_redirect', 'mcd_return_link');
そしてこの機能
function mcd_return_link {
return "edit-comments.php";
}
comments.php(コアファイル)の中には、このセクションのコードがあります(コメントを編集するセクションの中の310行目)(バージョン4.720)。
$location = ( empty( $_POST['referredby'] ) ? "edit-comments.php?p=$comment_post_id" : $_POST['referredby'] ) . '#comment-' . $comment_id;
/**
* Filters the URI the user is redirected to after editing a comment in the admin.
*
* @since 2.1.0
*
* @param string $location The URI the user will be redirected to.
* @param int $comment_id The ID of the comment being edited.
*/
$location = apply_filters( 'comment_edit_redirect', $location, $comment_id );
wp_redirect( $location );
add_filter
の目的は、comments.phpファイルの$location
値を変更して(adminの)コメントリスト画面に戻ることです。
だから私のプラグインはページに入力されているショートコードを使用しています
私のテストシステムでは、フィルタが適用されているかどうかをチェックするために、corecomments.phpのapply_filters
行の前後にコードを追加して$location
をエコーしています。値。
両方の値(beforeとafter)は呼び出しページ(編集リンク付きのコメントを表示する私のページ)を示しています。 'edit-comments.php'ページにはリダイレクトされないため、フィルタは適用されていないようです。
add_filter
の優先順位を7と15に変更しても効果はありません。
私はまた、フィルタが認識されるようにするために$wp_filter
グローバル変数をダンプしました。
フィルタが適用されないのはなぜですか?
**(提案された回答の後に2月6日に編集)**
私はecho関数とwp_die()をフィルタ関数の中に追加しました。私はまた私のテストマルチサイトでこの問題のさらなるテストをしました。
このことから、何らかの理由で、add-filterはsite-1またはsite-2のコメントへのリンクからは呼び出されず、site-0のコメントへのリンクから呼び出された場合には機能すると結論します。繰り返しますが、コメントを表示するページはsite-0です。
それで、それがsite-0できちんと動くとき、なぜadd-filterはsite-1かsite-2のためにコメント編集スクリーンに行くどんなリンクでも動かないのですか?
別の質問を引き起こす答え...
プラグインがsite-1またはsite-2でアクティブではなく、site-2のコメントへのリンクをクリックすると、コメント編集画面に移動します。
しかし、プラグインはsite-1/site-2ではアクティブではないので(マルチサイト管理では 'network activated'であっても)、short-codeはsite-1/2ページでは機能せず、したがってadd_filter isn '実行されました。
そのため、コメントがあるサイトでプラグインが有効になっている場合に、コメントリンクの場合にのみadd_filterを実行する「filter-of-the-filter」が必要です。
しかし...これはなぜ私が持っている非常によく似たプラグイン(それは 'マルチサイトメディアディスプレイ'と呼ばれるすべてのサイトのすべてのメディアを表示する)を説明しないあなたがすることができます:
Media Editの 'x'には、どのページに戻りたいかを指定するコードがありません(310行目のcomments.phpの$ locationの値)。
しかし、ショートコードがsite-0で実行されたときに、コメントエディタがsite-1のadd_filterコマンドを「参照」しないのはなぜですか?
それで、別の質問を引き起こす答え…….
注意してください、この種のadd_filter
を避けてください。
add_filter( 'comment_edit_redirect', 'mcd_return_link');
常にパラメータの数を設定するようにしてください。それ以外の場合、デフォルトは1です。
add_filter( 'comment_edit_redirect', 'mcd_return_link', 10 , 2);
フィルタが適用されないのはなぜですか?
言いにくい。次のコードを追加してから、コメントを編集してみてください。これは基本的にあなたがすでに持っているものと同じものですが、2つのパラメータを持つ無名関数を使用しています。
add_filter( 'comment_edit_redirect', function( $location, $comment_id ) {
wp_die( 'I\'m dead.' );
}, 10, 2 );
試してみたところ、期待通りの結果が得られたか、WordPressが死にました。
wp_die( 'I'm dead.' );
をreturn 'edit-comments.php';
に変更すると、予想通り、コメントを編集した後にコメント編集ページにリダイレクトされます。
コールバックが正しく呼び出されていて(wp_dieテスト)、それでもフィルタが適用されていないように見える場合は、干渉する他のプラグイン/テーマ機能があるはずです。優先順位を999999のような非常に大きな値に変更してみてください。それでもうまくいかない場合は、デフォルトのテーマを使用しながら他のすべてのプラグインを無効にしてみてください。