我刚从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);
});
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
}