投稿のajaxインクルージョンでショートコードフィルターを適用できない理由を理解できますか?
説明をよくしましょう。有名な 5のヒント で推奨されているように、admin-ajax.phpを使用して、別の投稿内から投稿を含めることができました。
明らかに、ショートコードタグを表示したり、それらを削除したりしたくないので、do_shortcode($post->post_content)
をエコーしています
この時点で、投稿ギャラリーはレンダリングされますが、unfiltered、「Cleaner Gallery」プラグインを実行していますが、add_filter( 'post_gallery', 'cleaner_gallery', 10, 2 );
で始まり、正常に動作します(非- ajax)投稿。
私は置き換えてこの問題をデバッグしようとしています
$output = apply_filters('post_gallery', '', $attr);
if ( $output != '' )
return $output;
と
$output = apply_filters('post_gallery', '', $attr);
echo 'FILTERED OUTPUT = '.$output.' !';
if ( $output != '' )
return $output;
関数gallery_shortcode($ attr)の中/ wp-includes/media.phpにあります。 2回実行されるように見えますが、ajaxインクルージョンでは、最初は出力が空であり、その後はフィルタリングされません。
まあ、すべての効果で、私が言及した「第2ラウンド」エコー出力も、再設定時に空のままになることが起こりますadd_filter前do_shortcode;それ以外の場合は表示されます(しかし、私が言ったように、フィルタリングされていません)。
私もそれを追跡しようとしました
echo has_filter('post_gallery');
echo current_filter();
そして、hasが常に1を返す一方で、current最初に期待どおり 'post-gallery'を返し、次にリクエストを処理するために必要な '* wp_ajax_nopriv_etc *'フックによって上書きされますadmin-ajax.phpしかし、実際にはアクションおよびnotフィルターです。 (?!?)
また、デフォルトの関数をフィルタリングせずにショートコードを直接実行し、元のショートコードを削除して新しいものを追加するために、クリーナーギャラリープラグインをハッキングすることも成功しませんでした。通常の投稿の魅力のように機能しますが、ajaxリクエストにプラグインを実装する方法はないようです。
私はますます混乱しています。私を助けてください!
( WP.orgフォーラム にも投稿されています)
Awww ... inadmin-ajax.php:
define('WP_ADMIN', true);
cleaner-gallery.php:
function cleaner_gallery_setup() {
if ( is_admin() ) {
require_once( CLEANER_GALLERY_DIR . 'admin.php' );
} else {
require_once( CLEANER_GALLERY_DIR . 'gallery.php' );
}
}
だから私は手動でWP_ADMIN定数をチェックした後にスキップされた必要なプラグインコードをインクルードして実行しなければなりません、しかし私はフロントエンドのAjaxハンドラの必要性がますます緊急になっていると思います!
WordPressが投稿コンテンツを表示するとき、それは投稿コンテンツに対してdo_shortcode()
を実行していません、それはapply_filters( 'the_content', $content )
を実行しています。ショートコードフィルタは、the_content
フィルタに適用されます。そのため、ウィジェットやフッタなどで機能させるには、フィルタを追加する必要があります。
あなたが解決策を回避したかどうかわからないが、私は同様の問題を抱えていたし、それによって解決されました:
独自のギャラリー機能を元のギャラリーのショートコードにバインドする(カスタムのギャラリー機能用の新しいショートコードを作成する代わりに)
//unbinds WordPress function in order to replace it with new code
remove_shortcode('gallery', 'gallery_shortcode');
//binds own custom gallery code function
add_shortcode('gallery', 'acmecustomgallery_shortcode');
詳細 はこちら 。