我有一个简单的函数,它返回具有给定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 (在此过程中更新至最新版本)
Question:在返回内容之前,如何呈现短代码?我两个都试过了
echo apply_filters(\'the_content\', $page_data->post_content);
以及
echo do_shortcode($page_data -> post_content);
最合适的回答,由SO网友:Dhinju Divakaran 整理而成
自4.9版以来,visual composer添加了短代码延迟加载。要在AJAX内容上使用VC短代码,请在打印内容之前使用此函数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\' );
SO网友:Mark Kaplun
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 (使用该功能是非常罕见的情况之一)。