添加支持通配符的自定义菜单项

时间:2017-05-23 作者:F1234k

我还不太熟悉Wordpress的术语,所以这可能就是为什么我的Google搜索结果是空的,但我想这是一个困扰很多有Drupal背景的开发人员的问题,他们会转向Wordpress。

简短版本:

“有没有办法以编程方式添加像mywordpresssite.com/my/custom/url/%/%(其中%是通配符)这样的菜单项,并定义此页面将在我的代码中返回什么?”

扩展版本:

在Drupal中,有一个名为hook\\u menu的钩子,您可以在其中定义如上所述的菜单路径,以及一个将通配符作为参数的回调函数。

我想做的很简单:在网站的每个帖子上创建一个按钮;当在特定帖子中单击此按钮时,它将通过AJAX向菜单项发出简单的GET请求,如:mywordpresssite。com/ajax调用/%current\\u post\\u id,这将允许我在后台对特定帖子进行进一步处理。

我希望上述内容有意义。如果这不是Wordpress中的工作方式,请提供有关我应该如何着手完成手头任务的任何资源。

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

保存新帖子后,可以使用此代码。否则,此时没有post对象。

请注意代码未经测试。

<?php
// get post ID from the URL query
$post_id = $_GET[\'post\'];

// get post object
$new_item_to_add = get_post($post_id, OBJECT);

// get menu to add the item into (change to the relevant slug, ID, or name)
$existing_menu = wp_get_nav_menu_object(\'test-nav-menu-slug\');
$existing_menu_id = $existing_menu->term_id;

$new_menu_item_data =  array(
    \'menu-item-db-id\' => $menu_item_db_id, // default 0, creates a new one
    \'menu-item-object-id\' => $post_id,
    \'menu-item-object\' => \'\', //default
    \'menu-item-parent-id\' => 0, //default
    \'menu-item-position\' => 0, //default
    \'menu-item-type\' => $new_item_to_add->post_type,
    \'menu-item-title\' => $new_item_to_add->post_title,
    \'menu-item-url\' => get_permalink($post_id),
    \'menu-item-description\' => \'\', //default
    \'menu-item-attr-title\' => \'\', //default
    \'menu-item-target\' => \'\', //default
    \'menu-item-classes\' => \'\', //default
    \'menu-item-xfn\' => \'\', //default
    \'menu-item-status\' => \'publish\',
);

wp_update_nav_menu_item($existing_menu_id, $menu_item_db_id = 0, $new_menu_item_data);
请参见wp_update_nav_menu_item 代码参考。

还有一种更糟糕的方法。您可以动态更改菜单。这不会更新菜单:

<?php
function wpse267737_add_nav_menu_items($nav_menu_items) {

    // get post ID from URL
    $post_id = $_GET[\'post\'];

    // get current post data
    $link_url = get_permalink( $post_id );
    $link_anchor =  get_the_title( $post_id );

    // build new menu item
    $new_menu_item = \'<li><a href="\' . $link_url . \'">\' . $link_anchor . \'</a></li>\';

    // concatenate existing items and new
    $nav_menu_items .= $new_menu_item;

    return $nav_menu_items;
}
// change TEST-MENU-SLUG to the relevant menu slug
add_filter( \'wp_nav_menu_TEST-MENU-SLUG_items\', \'wpse267737_add_nav_menu_items\' );
请参见wp_nav_menu_items 参考

结束

相关推荐