it-swarm.com.de

Shortcodes nicht in aufgelöst AJAX Anrufbeantworter

Ich habe eine einfache Funktion, die den Inhalt einer Seite mit der angegebenen pageID zurückgibt:

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

Aber nach einem Update von WP und einigen Plugins enthält der zurückgegebene Inhalt immer noch ungelöste Shortcodes wie diesen:

[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″]

Die Shortcodes stammen von einem Plugin namens Visual Composer (das dabei auf die neueste Version aktualisiert wurde)

Frage: Wie kann ich die Shortcodes rendern, bevor ich den Inhalt zurückgebe? Ich habe beides versucht

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

und

echo do_shortcode($page_data -> post_content);
1

Seit Version 4.9 fügt Visual Composer den Shortcode Lazy Loading hinzu. Um VC Shortcodes für AJAX Inhalte zu verwenden, verwenden Sie diese Funktion, bevor Sie den Inhalt ausdrucken. WPBMap::addAllMappedShortcodes();. Der folgende Code kann Ihnen also helfen,

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

the_content wird normalerweise im Rahmen einer Schleife "ausgeführt", wenn alle relevanten globalen Daten gesetzt sind. Sie sollten versuchen, es zu imitieren, indem Sie Code wie verwenden

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

Dies kann ausreichen oder auch nicht, abhängig von den spezifischen Überprüfungen, die das Plugin durchführt, und Sie müssen das Hauptabfrageobjekt möglicherweise mithilfe von query_posts erstellen (einer der sehr seltenen Fälle, in denen es in Ordnung ist, diese Funktion zu verwenden ).

1
Mark Kaplun