WordPress - 在同一页面上显示某个类别的帖子

时间:2014-08-13 22:31:25

标签: php html wordpress

我有一个名为“Shop”的页面。在该页面上,我显示了一个自定义菜单,其中包含指向“书籍”,“鞋子”等类别的链接。每当我点击其中一个链接/类别时,我会转到相关的类别页面,例如/category/books/

我不希望它将我重定向到类别页面,我希望它显示在单击菜单项的同一页面(“商店”)上的帖子。我尝试完成此任务时遇到的唯一问题是,我不知道如何更改自定义菜单行为。我不希望它重定向我,而是将GET值发送到同一页面(“商店”)。然后商店页面将获取该GET值并显示相关帖子。

我知道如何显示某个类别的帖子等。我只是不知道如何更改自定义菜单的行为。

有人能帮帮我吗?我将不胜感激。

1 个答案:

答案 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值并且我没有经验。如果您的固定链接设置不同,并且每次更改它,则必须编辑正则表达式。