web-dev-qa-db-fra.com

Shortcodes non résolus dans AJAX réponse d'appel

J'ai une fonction simple, qui renvoie le contenu d'une page avec l'ID de page donné:

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

Mais après une mise à jour de WP et de certains plug-ins, le contenu renvoyé contient toujours des codes abrégés non résolus, comme suit:

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

Les shortcodes proviennent d'un plugin appelé Visual Composer (qui a été mis à jour dans le processus à la dernière version)

Question: Comment puis-je restituer les codes abrégés avant de renvoyer le contenu? J'ai essayé les deux

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

et

echo do_shortcode($page_data -> post_content);
2

Depuis la version 4.9, visual composer a ajouté le shortcode lazy loading. Pour utiliser VC codes abrégés sur AJAX contenu, utilisez cette fonction avant d'imprimer le contenu WPBMap::addAllMappedShortcodes();. Donc, le code ci-dessous peut vous aider,

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
Dhinju Divakaran

the_content est généralement "exécuté" dans le contexte d'une boucle lorsque toutes les données globales pertinentes sont définies. Vous devriez essayer de l'imiter en utilisant un code comme

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

Cela peut être suffisant ou non, en fonction des vérifications spécifiques effectuées par le plug-in, et vous devrez peut-être construire l'objet de requête principal probablement en utilisant query_posts (un des très rares cas dans lesquels il est correct d'utiliser cette fonction. ).

1
Mark Kaplun