Ajax, filters and shortcodes

时间:2011-06-29 作者:3dolab

您能理解为什么我无法在ajax帖子包含中应用短代码过滤器吗?

让我更好地解释一下:我已经设法在另一篇文章中包含一篇文章,通过admin-ajax.php, 正如著名的5 tips.

很明显,我不想显示快捷码标签,也不想去掉它们,所以我在回应do_shortcode($post->post_content)

此时,虽然我正在运行“Cleaner gallery”插件,但post gallery会被渲染,但未被过滤add_filter( \'post_gallery\', \'cleaner_gallery\', 10, 2 ); 并成功地在正常(非ajax)帖子中工作。

我一直试图通过替换

$output = apply_filters(\'post_gallery\', \'\', $attr);
    if ( $output != \'\' )
        return $output;
使用

$output = apply_filters(\'post_gallery\', \'\', $attr);
echo \'FILTERED OUTPUT = \'.$output.\' !\';
    if ( $output != \'\' )
        return $output;
内部function gallery_shortcode($attr) 位于wp包括/介质中。php。它似乎运行了两次,但在ajax包含中,第一次输出是空的,然后不进行过滤。

好吧,实际上,当再次设置时,我提到的“第二轮”回声输出也会保持为空add_filter 之前do_shortcode; 否则会显示出来(但正如我所说,未过滤)。

我也试着用

echo has_filter(\'post_gallery\');
echo current_filter();
我发现has 始终返回1, 虽然current 第一次返回\'post-gallery\' 如预期的那样,然后它会被\'*wp_ajax_nopriv_etc*\' 钩子,它是使用管理ajax处理请求所必需的。php,但它实际上是actionnot A.filter. (?!?)

我也尝试过破解cleaner gallery插件,但没有成功,为了让它直接运行短代码而不过滤默认函数,我删除了原始的短代码并添加了新的短代码。对于普通帖子来说,它很有魅力,但似乎没有办法在ajax请求中实现插件。

我越来越糊涂了。请帮帮我!

(也发布在WP.org forums)

3 个回复
最合适的回答,由SO网友:3dolab 整理而成

Awww。。。在里面admin-ajax.php:

define(\'WP_ADMIN\', true);
在中cleaner-gallery.php:

function cleaner_gallery_setup() {    
    if ( is_admin() ) {
        require_once( CLEANER_GALLERY_DIR . \'admin.php\' );
    } else {
        require_once( CLEANER_GALLERY_DIR . \'gallery.php\' );
    }
}
因此,我必须手动包括&;检查WP\\u ADMIN常量后,运行跳过的必要插件代码,但我想对前端ajax处理程序的需求正变得越来越迫切!

SO网友:EAMann

WordPress显示帖子内容时,它不会运行do_shortcode() 在帖子内容上,它正在运行apply_filters( \'the_content\', $content ). 短码过滤器应用于the_content 过滤器,这就是为什么您必须添加额外的过滤器,以使它们在小部件、页脚或其他地方工作。

SO网友:Celso Bessa

不知道您是否找到了解决方案,但我遇到了类似的问题,并通过以下方式解决了:

将原始库功能从库短代码中解除绑定将我自己的库功能绑定到原始库短代码(而不是为自定义库功能创建新的短代码)

//unbinds WordPress function in order to replace it with new code
remove_shortcode(\'gallery\', \'gallery_shortcode\');
//binds own custom gallery code function
add_shortcode(\'gallery\', \'acmecustomgallery_shortcode\');
更多详细信息here.

结束

相关推荐

无法在AJAX查询中使用GET_RESULTS()

我使用jquery ajax调用从wpdb获取特定数据,得到以下消息:<b>Fatal error</b>: Call to a member function get_results() on a non-object in <b>C:\\wamp\\www\\maps_en2\\markers.php</b> on line <b>15</b><br /> 这是电话:$.ajax({ typ