我有一个名为“Shop”的页面。在该页面上,我显示了一个自定义菜单,其中包含指向“书籍”,“鞋子”等类别的链接。每当我点击其中一个链接/类别时,我会转到相关的类别页面,例如/category/books/
。
我不希望它将我重定向到类别页面,我希望它显示在单击菜单项的同一页面(“商店”)上的帖子。我尝试完成此任务时遇到的唯一问题是,我不知道如何更改自定义菜单行为。我不希望它重定向我,而是将GET值发送到同一页面(“商店”)。然后商店页面将获取该GET值并显示相关帖子。
我知道如何显示某个类别的帖子等。我只是不知道如何更改自定义菜单的行为。
有人能帮帮我吗?我将不胜感激。
答案 0 :(得分:1)
原始答案:
使用wp_get_nav_menu_items
:
$menu_slug = 'YOUR_MENU_SLUG';
$menu_id = get_nav_menu_locations()[$menu_slug];
$menu_items = wp_get_nav_menu_items($menu_id);
foreach($menu_items as $item){
if($item->object == 'category'){
print('<p>Title: ' . $item->title . '<br>ID: ' . $item->object_id . '</p>');
}
}
wp_get_nav_menu_items
返回一系列菜单项。您可以获得有关该项目的多个信息,例如类型(帖子,类别,...),ID,标题等。
有关完整的属性列表,请参阅http://codex.wordpress.org/Function_Reference/wp_get_nav_menu_items。
希望这会有所帮助:)
<强>更新强>
假设您的固定链接设置设置为默认值,以下代码将打印使用GET的已修改菜单。
$menu = wp_nav_menu(array(
'theme_location'=>'YOUR_MENU_LOCATION',
'echo'=>0,
));
$new_url = $_SERVER['SCRIPT_NAME'] . '?shop_page=$1';
$menu = preg_replace('/href="[^"]*cat=(.+)"/', 'href="'.$new_url.'"', $menu);
print($menu);
正则表达式可能不是最好的,因为它忽略了其他GET值并且我没有经验。如果您的固定链接设置不同,并且每次更改它,则必须编辑正则表达式。