web-dev-qa-db-ja.com

Ajax、フィルター、ショートコード

投稿の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_filterdo_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フォーラム にも投稿されています)

1
3dolab

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ハンドラの必要性がますます緊急になっていると思います!

0
3dolab

WordPressが投稿コンテンツを表示するとき、それは投稿コンテンツに対してdo_shortcode()を実行していません、それはapply_filters( 'the_content', $content )を実行しています。ショートコードフィルタは、the_contentフィルタに適用されます。そのため、ウィジェットやフッタなどで機能させるには、フィルタを追加する必要があります。

2
EAMann

あなたが解決策を回避したかどうかわからないが、私は同様の問題を抱えていたし、それによって解決されました:

  • ギャラリーのショートコードから元のギャラリー機能をアンバインドする
  • 独自のギャラリー機能を元のギャラリーのショートコードにバインドする(カスタムのギャラリー機能用の新しいショートコードを作成する代わりに)

    //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');
    

詳細 はこちら

1
Celso Bessa