在AJAX调用响应中未解析快捷代码

时间:2016-05-18 作者:Maximilian Körner

我有一个简单的函数,它返回具有给定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);

2 个回复
最合适的回答,由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 (使用该功能是非常罕见的情况之一)。

相关推荐

Select2 AJAX和WP查询返回全部,不筛选

所以我在这里有点困惑。我经常使用Select2/AJAX/WP\\u查询来搜索和检索默认的WP帖子类型和我自己的自定义帖子类型。在过去几年中,我构建的几乎每个站点都至少包含一个实现。但是,我目前正在一个网站上搜索自定义帖子类型的结果,它只是返回所有内容。没有发生过滤。这是一个计划工具,管理员正在为一年中的每个月制定一个计划(自定义帖子类型)。时间表的标题为“月-年”,即。\'January 2022\'.问题是,如果您搜索“一月”,例如,您将得到返回的每个存在的时间表。包括2022年2月、2021 6月等