插件快捷代码在AJAX请求调用上不起作用

时间:2016-01-06 作者:Efren Reyes

我刚从wpbarkery购买了Visual Composer插件,我的问题是我正在调用ajax来获取使用Visual Composer编辑的帖子的内容,当我获取数据时,它只显示插件的短代码

从我找到的关于如何解决这个问题的信息中可以看出,ajax调用无法显示短代码,因为管理员ajax url无法完全访问wordpress环境,但我想知道是否有人这样做了,这将对我有很大帮助

基本上这就是我打印它的方式,ajax调用工作正常,它显示了我保存的内容,但元素没有正确显示,它只显示了短代码

此代码位于我制作的插件中

function prefix_load_proyect () {
$post_id = $_POST[ \'proyect\' ];
$the_query = new WP_Query(array(\'p\'=>$post_id, \'post_type\' => \'home_portfolio\'));

while ( $the_query->have_posts() ) : $the_query->the_post();

$content = apply_filters(\'the_content\', $post->post_content);
$content = do_shortcode(get_post_field(\'post_content\', $postid));
$html=$content;

endwhile; 
wp_reset_postdata();

        echo $html;
        die();
}
然后在js文件中,我只进行ajax调用,并将带有jquery的html响应放入一个容器中

 jQuery.ajax({
        type: \'POST\',
        url: ajaxurl,
        data: {"action": "load-filter-proyect", proyect: proyectID },
        success: function(response) {

            jQuery(\'#agregarProyectContainer\').html(response);

    });

2 个回复
SO网友:TheDeadMedic

。。。ajax调用无法显示短代码,因为管理员ajax url对wordpress环境没有完全访问权限

不是真的。AJAX调用的资源与常规WordPress请求完全相同。只需确保以相同的方式解析内容the_content() 是否:

$parsed_content = apply_filters( \'the_content\', $post->post_content );
Update: 您的代码一团糟,请尝试以下操作:

function prefix_load_proyect() {
    if ( ! isset( $_POST[\'proyect\'] ) || ! $post_id = absint( $_POST[\'proyect\'] ) )
        return;

    if ( ! $post = get_post( $post_id ) )
        return;

    echo apply_filters( \'the_content\', $post->post_content );
    exit;
}

SO网友:Martin from WP-Stars.com

自Visual Composer版本4.9以来,必须在apply\\u筛选器(\'the\\u content\',…)之前使用WPBMap::addAllMappedShortcodes()或do\\u shortcode()。顺便说一下,您不需要同时使用这两种过滤器,因为apply\\u filters(\'the\\u content\',…)仍然执行do\\u shortcode()。

您的功能将是:

function prefix_load_proyect () {

  $post_id = $_POST[ \'proyect\' ];
  $the_query = new WP_Query(array(\'p\'=>$post_id, \'post_type\' => \'home_portfolio\'));


  /* --- Necessary since Visual Compoer V 4.9 --- */
  WPBMap::addAllMappedShortcodes();


  while ( $the_query->have_posts() ) : $the_query->the_post();

    $content .= apply_filters(\'the_content\', $post->post_content);
  endwhile;

  echo $content;
  wp_die(); // wp_die() instead of die() provides better integration with WordPress
}

相关推荐

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

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