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