如果 post 有两个类别,如何在菜单中 select 单个类别?

How to select single category in menu if post have two categories?

我的网站 post 有一、二、三等类别,具体取决于文章。我的菜单由类别组成。当我 select post(打开整篇文章)时,它在菜单中显示 post 类别。

问题:当我 select 这样的文章有两个类别时菜单显示两个 select 菜单。我怎样才能只显示一个类别(第一类)?

在上图中你可以看到当我 select 一些 post 有两个类别时两个菜单 selected.

应在 function.php、nav-menu-template.php 或其他任何地方进行更改....

foreach ( (array) $menu_items as $key => $menu_item ) {

    $menu_items[$key]->current = false;

    $classes = (array) $menu_item->classes;
    $classes[] = 'menu-item';
    $classes[] = 'menu-item-type-' . $menu_item->type;
    $classes[] = 'menu-item-object-' . $menu_item->object;

    // if the menu item corresponds to a taxonomy term for the currently-queried non-hierarchical post object
    if ( $wp_query->is_singular && 'taxonomy' == $menu_item->type && in_array( $menu_item->object_id, $possible_object_parents ) ) {
        $active_parent_object_ids[] = (int) $menu_item->object_id;
        $active_parent_item_ids[] = (int) $menu_item->db_id;
        $active_object = $queried_object->post_type;

    // if the menu item corresponds to the currently-queried post or taxonomy object
    } elseif (
        $menu_item->object_id == $queried_object_id &&
        (
            ( ! empty( $home_page_id ) && 'post_type' == $menu_item->type && $wp_query->is_home && $home_page_id == $menu_item->object_id ) ||
            ( 'post_type' == $menu_item->type && $wp_query->is_singular ) ||
            ( 'taxonomy' == $menu_item->type && ( $wp_query->is_category || $wp_query->is_tag || $wp_query->is_tax ) && $queried_object->taxonomy == $menu_item->object )
        )
    ) {
        $classes[] = 'current-menu-item';
        $menu_items[$key]->current = true;
        $_anc_id = (int) $menu_item->db_id;

        while(
            ( $_anc_id = get_post_meta( $_anc_id, '_menu_item_menu_item_parent', true ) ) &&
            ! in_array( $_anc_id, $active_ancestor_item_ids )
        ) {
            $active_ancestor_item_ids[] = $_anc_id;
        }

        if ( 'post_type' == $menu_item->type && 'page' == $menu_item->object ) {
            // Back compat classes for pages to match wp_page_menu()
            $classes[] = 'page_item';
            $classes[] = 'page-item-' . $menu_item->object_id;
            $classes[] = 'current_page_item';
        }
        $active_parent_item_ids[] = (int) $menu_item->menu_item_parent;
        $active_parent_object_ids[] = (int) $menu_item->post_parent;
        $active_object = $menu_item->object;

    // if the menu item corresponds to the currently-requested URL
    } elseif ( 'custom' == $menu_item->object ) {
        $_root_relative_current = untrailingslashit( $_SERVER['REQUEST_URI'] );
        $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_root_relative_current );
        $raw_item_url = strpos( $menu_item->url, '#' ) ? substr( $menu_item->url, 0, strpos( $menu_item->url, '#' ) ) : $menu_item->url;
        $item_url = untrailingslashit( $raw_item_url );
        $_indexless_current = untrailingslashit( preg_replace( '/' . preg_quote( $wp_rewrite->index, '/' ) . '$/', '', $current_url ) );

        if ( $raw_item_url && in_array( $item_url, array( $current_url, $_indexless_current, $_root_relative_current ) ) ) {
            $classes[] = 'current-menu-item';
            $menu_items[$key]->current = true;
            $_anc_id = (int) $menu_item->db_id;

            while(
                ( $_anc_id = get_post_meta( $_anc_id, '_menu_item_menu_item_parent', true ) ) &&
                ! in_array( $_anc_id, $active_ancestor_item_ids )
            ) {
                $active_ancestor_item_ids[] = $_anc_id;
            }

            if ( in_array( home_url(), array( untrailingslashit( $current_url ), untrailingslashit( $_indexless_current ) ) ) ) {
                // Back compat for home link to match wp_page_menu()
                $classes[] = 'current_page_item';
            }
            $active_parent_item_ids[] = (int) $menu_item->menu_item_parent;
            $active_parent_object_ids[] = (int) $menu_item->post_parent;
            $active_object = $menu_item->object;

        // give front page item current-menu-item class when extra query arguments involved
        } elseif ( $item_url == $front_page_url && is_front_page() ) {
            //$classes[] = 'current-menu-item';
        }

        if ( untrailingslashit($item_url) == home_url() )
            $classes[] = 'menu-item-home';
    }

    // back-compat with wp_page_menu: add "current_page_parent" to static home page link for any non-page query
    if ( ! empty( $home_page_id ) && 'post_type' == $menu_item->type && empty( $wp_query->is_page ) && $home_page_id == $menu_item->object_id )
        $classes[] = 'current_page_parent';

    $menu_items[$key]->classes = array_unique( $classes );
}

`

是的,我终于做到了。我在 nav-menu-template.php.

中进行了更改

我创建了一个变量并用上面的 1 初始化

foreach ( (array) $menu_items as $key => $parent_item ) {

此代码。

并添加条件代码

if($repetation == '1'){//to stop second selection of menu
     $classes[] = 'current-menu-parent';
        $menu_items[$key]->current_item_parent = true;
            $repetation++;
    }
         else{
    //echo $repetation;
         }

中间

if ( in_array( $parent_item->db_id, $active_parent_item_ids ) ) {

...}

这个。

整个代码看起来像

   $repetation = '1';
// set parent's class
foreach ( (array) $menu_items as $key => $parent_item ) {
    $classes = (array) $parent_item->classes;
    $menu_items[$key]->current_item_ancestor = false;
    $menu_items[$key]->current_item_parent = false;

    if (
        isset( $parent_item->type ) &&
        (
            // ancestral post object
            (
                'post_type' == $parent_item->type &&
                ! empty( $queried_object->post_type ) &&
                is_post_type_hierarchical( $queried_object->post_type ) &&
                in_array( $parent_item->object_id, $queried_object->ancestors ) &&
                $parent_item->object != $queried_object->ID
            ) ||

            // ancestral term
            (
                'taxonomy' == $parent_item->type &&
                isset( $possible_taxonomy_ancestors[ $parent_item->object ] ) &&
                in_array( $parent_item->object_id, $possible_taxonomy_ancestors[ $parent_item->object ] ) &&
                (
                    ! isset( $queried_object->term_id ) ||
                    $parent_item->object_id != $queried_object->term_id
                )
            )
        )
    ) {
        $classes[] = empty( $queried_object->taxonomy ) ? 'current-' . $queried_object->post_type . '-ancestor' : 'current-' . $queried_object->taxonomy . '-ancestor';
    }

    if ( in_array(  intval( $parent_item->db_id ), $active_ancestor_item_ids ) ) {
        $classes[] = 'current-menu-ancestor';
        $menu_items[$key]->current_item_ancestor = true;
    }
    if ( in_array( $parent_item->db_id, $active_parent_item_ids ) ) {

                if($repetation == '1'){//to stop second selection of menu
                    $classes[] = 'current-menu-parent';
        $menu_items[$key]->current_item_parent = true;
                    $repetation++;
                }
                else{
                    //echo $repetation;
                }

    }
    if ( in_array( $parent_item->object_id, $active_parent_object_ids ) )
        $classes[] = 'current-' . $active_object . '-parent';

    if ( 'post_type' == $parent_item->type && 'page' == $parent_item->object ) {
        // Back compat classes for pages to match wp_page_menu()
        if ( in_array('current-menu-parent', $classes) )
            $classes[] = 'current_page_parent';
        if ( in_array('current-menu-ancestor', $classes) )
            $classes[] = 'current_page_ancestor';
    }

    $menu_items[$key]->classes = array_unique( $classes );

}