Functions.php过滤器未应用于AJAX调用

时间:2015-07-13 作者:Ewout

我已经使用php向菜单中添加了一个元素(为了便于说明,简化了代码):

add_filter( \'wp_nav_menu_\' . $menu_slug . \'_items\', \'add_menu_item\' , 10, 2 );
function add_menu_item ( $items ) {
    $item = sprintf(\'<li class="custom-item">%s</li>\', menu_item_content () );
    $items .= $item;
    return $item;
}
function menu_item_content () {
    $item_content = rand(1,99).\' custom menu item\';
    $item_content = apply_filters( \'custom_menu_item_filter\', $item_content );
    return $item_content;
}
当按下按钮时,我会通过ajax更新这个非常相同的元素:

php:

add_action( \'wp_ajax_menu_item_ajax\', array( &$this, \'menu_item_ajax\' ), 0 );
add_action( \'wp_ajax_nopriv_menu_item_ajax\', array( &$this, \'menu_item_ajax\' ), 0 );   
function menu_item_ajax() {
    echo menu_item_content ();
    die();
}
js公司:

$(\'.custom-item\').load(menu_item_ajax.ajaxurl+\'?action=menu_item_ajax&_wpnonce=\'+menu_item_ajax.nonce);
这在我的开发网站上运行良好。更新菜单项并正确应用自定义筛选器(custom\\u menu\\u item\\u filter)。

但是,在另一个站点(不同的主题、插件等)上,当按下按钮时,菜单项会更新,但从不应用过滤器。

对于某些主题,功能是否可能。AJAX调用中没有加载php?我读过here 它应该被加载,但这是我能想到为什么它在一个站点上工作而不是在另一个站点上工作的唯一原因。如果该项没有更新,我会将其归因于缓存(参考示例中为rand(1,99)),但奇怪的是,它实际上是在没有过滤器的情况下正确更新的。

任何指点都将不胜感激!

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

事实证明,某些主题禁用了功能。php用于后端,以防止完全锁定。他们这样做的方式就是is_admin() 检查然而,由于所有AJAX都是通过admin AJAX运行的。php,则返回true,并且不会加载主题函数。在这种特殊情况下(Genesis Framework(主题)和Dynamic website builder(子主题)),有a setting to enable 主题也在后端发挥作用,不过我个人认为如果只检查主题!DOING_AJAX 除了is_admin()

结束

相关推荐

如何从AJAX回调函数返回多个参数

首先,请不要将问题标记为重复,因为我没有问如何使用ajax请求发送参数。我想得到一些关于ajax成功的额外论据。我的回调函数将返回一些html数据。但我想用这些数据得到一些其他的论点。可能类似于: success: function( data, arg_1, arg_2 ) { if( arg_1 ) { $(\'selector\').append( data ); } else if