我已经使用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)),但奇怪的是,它实际上是在没有过滤器的情况下正确更新的。
任何指点都将不胜感激!