web-dev-qa-db-ja.com

ショートコードはで解決されていません AJAX 呼び出し応答

与えられたpageIDを持つページのコンテンツを返す簡単な関数があります。

function get_page_content(){

    $id = $_REQUEST['id'];

    $page_data = get_page($id);

      echo apply_filters('the_content', $page_data->post_content);
    //echo do_shortcode($page_data -> post_content);
    wp_die();
}
add_action( 'wp_ajax_nopriv_get_page_content', 'get_page_content' );
add_action( 'wp_ajax_get_page_content', 'get_page_content' );

しかし、WPといくつかのプラグインが更新された後も、返されるコンテンツには未解決のショートコードが含まれています。

[vc_row row_type=“row“ use_row_as_full_screen_section=“no“ type=“grid“ text_align=“left“ background_image_as_pattern=“without_pattern“][vc_column width=“1/1″]

ショートコードは Visual Composer というプラグインから来ています(これはその過程で最新バージョンに更新されました)。

質問: /コンテンツを返す前にショートコードをレンダリングするにはどうすればよいですか。私は両方試しました

echo apply_filters('the_content', $page_data->post_content);

そして

echo do_shortcode($page_data -> post_content);
2

バージョン4.9以降、ビジュアルコンポーザはショートコードの遅延読み込みを追加しました。 VCコンテンツでAJAXショートコードを使用するには、コンテンツを印刷する前にこの関数を使用しますWPBMap::addAllMappedShortcodes();。だから以下のコードはあなたを助けるかもしれない、

function get_page_content(){

    $id = $_REQUEST['id'];

    $page_data = get_page($id);

    WPBMap::addAllMappedShortcodes();

    echo apply_filters('the_content', $page_data->post_content);
    wp_die();
}
add_action( 'wp_ajax_nopriv_get_page_content', 'get_page_content' );
add_action( 'wp_ajax_get_page_content', 'get_page_content' );
3

関連するすべてのグローバルデータが設定されると、the_contentは通常ループのコンテキストで「実行」されます。次のようなコードを使ってそれを真似るようにしてください。

function get_page_content(){
    global $post;

    $id = $_REQUEST['id'];

    $post = get_page($id);
    setup_postdata($post);
      echo apply_filters('the_content', $post->post_content);
    //echo do_shortcode($page_data -> post_content);
    wp_die();
}
add_action( 'wp_ajax_nopriv_get_page_content', 'get_page_content' );
add_action( 'wp_ajax_get_page_content', 'get_page_content' );

これはプラグインが行う特定のチェック次第では十分かもしれませんし、おそらく query_posts を使ってメインのクエリーオブジェクトを構築する必要があるかもしれません。 ).

1
Mark Kaplun