php 如何更改WordPress子菜单顺序

tcbh2hod  于 2023-04-19  发布在  PHP
关注(0)|答案(1)|浏览(125)

我希望你做得很好。
我在WordPress上工作。我注册了新的文章类型和两个新的分类法和一个子菜单页面。现在我的菜单看起来像这样。
数据集为Post类型。
种和组是分类学。
上载关系CSV为子菜单页
数据集
→所有数据集
→添加新数据集
→物种
→团体
→上传关系CSV

我想更改子菜单项的顺序。
新秩序必须
数据集
→所有数据集
→物种
→团体
→上传关系CSV
→添加新数据集

add_filter( 'custom_menu_order', '__return_true' );
add_filter( 'menu_order', function( $custom_order ) {
    return array(
        'edit.php?post_type=datasets',
        'edit-tags.php?taxonomy=species&post_type=datasets',
        'edit-tags.php?taxonomy=group&post_type=datasets',
        'edit.php?post_type=datasets&page=upload-homologs-relations',
        'post-new.php?post_type=datasets',
    );
} );

但是这个代码对我没有帮助。
我尝试了新的代码。

function custom_submenu_order( $submenu, $parent_slug ) {
    // Make sure you replace "dataset" with the slug of your custom post type
    if ( $parent_slug === 'edit.php?post_type=dataset' ) {
        // Define the new order of the submenu items
        $new_order = array(
            'edit-tags.php?taxonomy=species&post_type=dataset', // "Species"
            'edit-tags.php?taxonomy=groups&post_type=dataset', // "Groups"
            'admin.php?page=upload-csv', // "Upload Relational CSV"
            'post-new.php?post_type=dataset' // "Add new Dataset"
        );
        // Sort the submenu items based on the new order
        uasort( $submenu[ $parent_slug ], function( $a, $b ) use ( $new_order ) {
            $a_index = array_search( $a[2], $new_order );
            $b_index = array_search( $b[2], $new_order );
            return $a_index - $b_index;
        } );
    }
    return $submenu;
}
add_filter( 'submenu_order', 'custom_submenu_order', 10, 2 );

然后我得到了它的钩子submenu_order不存在于WordPress中.请帮助我找到解决方案.

wgx48brx

wgx48brx1#

答案是Nagendra Rao对这个问题Wordpress: Change admin submenu order的回答。
Nagendra Rao的答案有这样一行代码:

add_filter( 'custom_menu_order', 'so_18766477_submenu_order' );

...实际上应该是两个add_filter()调用:

add_filter( 'custom_menu_order', '__return_true' );
add_filter( 'menu_order', 'CALLBACK_FUNCTION' );

...其中CALLBACK_FUNCTION使用menu_order过滤器钩子,可能类似于下面的函数。

回调函数

重新排序顶层和子菜单项

下面的回调函数演示了如何修改顶级菜单项和子菜单项。两者之间有一个重要的区别。menu_order传递的$menu_ord参数用于修改顶级项。您从$menu_ord中删除或省略的项将自动以其通常的顺序重新添加到最终结果中,位于您包含的项之后。这与$submenu全局变量不同。如果从$submenu中删除或省略项,则不会将这些缺失项重新添加到最终结果中。

/**
 * Reorder either top-level menu items or submenu level items or both.
 * If not editing top-level items, return the $menu_ord variable unchanged.
 * 
 * @param array $menu_ord Associative array of menu and submenu items
 *   passed to the function by the menu_order filter hook.
 *
 * @return array
 */
function CALLBACK_FUNTION( $menu_ord ) {
    // Global variable $submenu to be updated independently
    // from the local $reorder variable.
    global $submenu;

    // Optionally reorder top-level menu items.
    // Missing top-level items are automatically
    // added to the bottom of any items listed
    // here.
    // @see https://developer.wordpress.org/reference/hooks/menu_order/
    $reorder = array(
        'edit.php?post_type=page',
        'edit.php',
        'upload.php'
    );

    // Enable the next line to see all submenus
    //echo '<pre>'.print_r($submenu,true).'</pre>'.
    // See below for sample echo output.

    // Reorder submenu items for Post options.
    //my original order was 5,10,15,16
    $arr = array();
    $arr[] = $submenu['edit.php'][5];
    $arr[] = $submenu['edit.php'][10];
    $arr[] = $submenu['edit.php'][16];
    $arr[] = $submenu['edit.php'][15];
    $submenu['edit.php'] = $arr;

    return $reorder;
}

$submenu数组的Post数组元素(edit.php)的echo输出可能如下所示:

[edit.php] => Array
    (
        [5] => Array
            (
                [0] => All Posts
                [1] => edit_posts
                [2] => edit.php
            )

        [10] => Array
            (
                [0] => Add New
                [1] => edit_posts
                [2] => post-new.php
            )

        [15] => Array
            (
                [0] => Categories
                [1] => manage_categories
                [2] => edit-tags.php?taxonomy=category
            )

        [16] => Array
            (
                [0] => Tags
                [1] => manage_post_tags
                [2] => edit-tags.php?taxonomy=post_tag
            )

    )

相关问题