wordpress在外观的菜单栏里无法创建菜单,并且我提前创建好了分类目录后,菜单栏和文章分类都看不到目录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wordpress在外观的菜单栏里无法创建菜单,并且我提前创建好了分类目录后,菜单栏和文章分类都看不到目录相关的知识,希望对你有一定的参考价值。

参考技术A 怎么看你图片提示菜单名称重复了,但又没看你有建立了一个名称为TOP的菜单啊

你试过用其他名称建立菜单吗,例如Menu之类的

具体问题具体分析,但看图帮不了你哦

我的博客 Pladys追问

就是因为我建立了菜单了,但是一刷新又不显示了,同时我再建相同名称的菜单的话又会报如图的错误。数据库表项已经清空过,WP空间也清空过。搞不懂啥问题了。

追答

得实际看看你的情况才能判断问题所在

参考技术B 很简单,添加好菜单之后,记的把左边的导航菜单上添加选择,刚才做好的菜单名称

创建新菜单项 - Wordpress

【中文标题】创建新菜单项 - Wordpress【英文标题】:Creating new menu item - Wordpress 【发布时间】:2016-02-07 22:48:05 【问题描述】:

我正在寻找一种方法来创建可以添加到菜单中的新项目。

以下是我的问题的详细信息:我使用 WPML。 WPML 有一个不错的功能,您可以自动将切换器添加到菜单中。它将它添加到菜单的末尾,对此没有任何控制。

问题是,我希望我的语言切换器是 6 个元素中的第 4 个元素。在末尾自动添加元素的功能不符合我的需要。

所以我想创建一个可以在 apparence->menu 中使用的新元素,以便将我的语言切换器准确地放在我想要的位置。

有什么办法吗?

TLDR:我希望能够在菜单元素(Apparence->Menu)中推送自定义 HTML/PHP 代码。有什么功能可以做到这一点?

【问题讨论】:

有趣的问题,期待答案:D 如何创建自定义帖子类型“ui_elements”左右并将功能链接到帖子。然后将其添加到菜单中。 我使用的是预制模板。所以我不能像我希望的那样添加/修改模板。好吧,如果我可以手动修改标题,我的菜单就会在代码中完成。 【参考方案1】:

来自wp-includes/nav-menu-template.php,在Walker_Nav_Menu::start_el

/**
 * Filter a menu item's starting output.
 *
 * The menu item's starting output only includes `$args->before`, the opening `<a>`,
 * the menu item's title, the closing `</a>`, and `$args->after`. Currently, there is
 * no filter for modifying the opening and closing `<li>` for a menu item.
 *
 * @since 3.0.0
 *
 * @param string $item_output The menu item's starting HTML output.
 * @param object $item        Menu item data object.
 * @param int    $depth       Depth of menu item. Used for padding.
 * @param array  $args        An array of @see wp_nav_menu() arguments.
 */
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );

这意味着您可以使用该过滤器附加到单个导航菜单项的 HTML 内容(就在最后一个 li 标记之前)。 $item_output 包含到目前为止为该项目生成的 HTML。示例:

<?php

add_filter('walker_nav_menu_start_el', function ($item_output) 
    return $item_output . '<span>hello world</span>';
);

这会将&lt;span&gt;hello world&lt;/span&gt; 附加到每个导航菜单项HTML。在此过滤器之后将附加一个结束 li 标记。您可以使用第四个参数 ($args) 来验证当前呈现的导航菜单。

【讨论】:

即使这样修复了它,我也不能接受它作为答案。你永远不应该修改 WP 核心。 钩子不修改核心。它由核心提供,旨在供插件和主题使用以进行调整。【参考方案2】:

好的,我有临时解决办法。

这些是步骤:

    打开\wp-content\plugins\sitepress-multilingual-cms\inc\language-switcher.php786 线附近的某个地方,function wp_nav_menu_items_filter($items, $args) 在哪里

    在第一个之后添加这个:

    $tempitems = $items;  
    $tempitemsexplode = explode("\n", $tempitems);  
    $items = "";  
    $id = 2; //This is where widget will be located: example, if you want it to be at place 4, write 5
    

    if ( $abs_menu_id == $settings_menu_id || false === $abs_menu_id ) 之前添加这个:

    $id = 2;  
    for ($i = 0; $i < $id; $i++)  
        $items .= $tempitemsexplode[$i];  
      
    for($i = 0; $i < count($tempitemsexplode); $i++)  
        If ($i == $id)  
    

    转到函数底部及之前:return $items; 地址:

    现在,return $items; 之前添加:

    for ($i = $id; $i < count($tempitemsexplode); $i++)  
        $items .= $tempitemsexplode[$i];  
    
    

如果你卡在这里,整个函数对我来说是怎样的:

function wp_nav_menu_items_filter($items, $args)
    $tempitems = $items;
    $tempitemsexplode = explode("\n", $tempitems);
    $items = "";
    global $sitepress_settings, $sitepress;

    $current_language = $sitepress->get_current_language();
    $default_language = $sitepress->get_default_language();
    // menu can be passed as integer or object
    if(isset($args->menu->term_id)) $args->menu = $args->menu->term_id;

    $abs_menu_id = icl_object_id($args->menu, 'nav_menu', false, $default_language );
    $settings_menu_id = icl_object_id( $sitepress_settings[ 'menu_for_ls' ], 'nav_menu', false, $default_language );

    $id = 2;
    for ($i = 0; $i < $id; $i++)
        $items .= $tempitemsexplode[$i];
    

    for($i = 0; $i < count($tempitemsexplode); $i++)
        If ($i == $id)
            if ( $abs_menu_id == $settings_menu_id  || false === $abs_menu_id ) 

                $languages = $sitepress->get_ls_languages();


                $items .= '<li class="menu-item menu-item-language menu-item-language-current">';
                if(isset($args->before))
                    $items .= $args->before;
                
                $items .= '<a href="#" onclick="return false">';
                if(isset($args->link_before))
                    $items .= $args->link_before;
                

                $language_name = '';
                if ( $sitepress_settings[ 'icl_lso_native_lang' ] ) 
                    $language_name .= $languages[ $current_language ][ 'native_name' ];
                
                if ( $sitepress_settings[ 'icl_lso_display_lang' ] && $sitepress_settings[ 'icl_lso_native_lang' ] ) 
                    $language_name .= ' (';
                
                if ( $sitepress_settings[ 'icl_lso_display_lang' ] ) 
                    $language_name .= $languages[ $current_language ][ 'translated_name' ];
                
                if ( $sitepress_settings[ 'icl_lso_display_lang' ] && $sitepress_settings[ 'icl_lso_native_lang' ] ) 
                    $language_name .= ')';
                



                $alt_title_lang = esc_attr($language_name);

                if( $sitepress_settings['icl_lso_flags'] )
                    $items .= '<img class="iclflag" src="' . $languages[ $current_language ][ 'country_flag_url' ] . '"    title="' . esc_attr( $language_name ) . '" />';
                

                $items .= $language_name;

                if(isset($args->link_after))
                    $items .= $args->link_after;
                
                $items .= '</a>';
                if(isset($args->after))
                    $items .= $args->after;
                

                unset($languages[ $current_language ]);
                $sub_items = false;
                $menu_is_vertical = !isset($sitepress_settings['icl_lang_sel_orientation']) || $sitepress_settings['icl_lang_sel_orientation'] == 'vertical';
                if(!empty($languages))
                    foreach($languages as $lang)
                        $sub_items .= '<li class="menu-item menu-item-language menu-item-language-current">';
                        $sub_items .= '<a href="'.$lang['url'].'">';

                        $language_name = '';
                        if ( $sitepress_settings[ 'icl_lso_native_lang' ] ) 
                            $language_name .= $lang[ 'native_name' ];
                        
                        if ( $sitepress_settings[ 'icl_lso_display_lang' ] && $sitepress_settings[ 'icl_lso_native_lang' ] ) 
                            $language_name .= ' (';
                        
                        if ( $sitepress_settings[ 'icl_lso_display_lang' ] ) 
                            $language_name .= $lang[ 'translated_name' ];
                        
                        if ( $sitepress_settings[ 'icl_lso_display_lang' ] && $sitepress_settings[ 'icl_lso_native_lang' ] ) 
                            $language_name .= ')';
                        
                        $alt_title_lang = esc_attr($language_name);

                        if( $sitepress_settings['icl_lso_flags'] )
                            $sub_items .= '<img class="iclflag" src="'.$lang['country_flag_url'].'"    title="' . $alt_title_lang . '" />';
                        
                        $sub_items .= $language_name;

                        $sub_items .= '</a>';
                        $sub_items .= '</li>';

                    
                    if( $sub_items && $menu_is_vertical ) 
                        $sub_items = '<ul class="sub-menu submenu-languages">' . $sub_items . '</ul>';
                    
                

                if( $menu_is_vertical ) 
                    $items .= $sub_items;
                    $items .= '</li>';
                 else 
                    $items .= '</li>';
                    $items .= $sub_items;
                
            
        
    

    for ($i = $id; $i < count($tempitemsexplode); $i++)
        $items .= $tempitemsexplode[$i];
    

    return $items;


我会尽量让您更轻松地更改小部件的放置位置。 如果您有问题,请发表评论。祝你好运!

编辑:解释这个修改后的函数的作用。 此功能用于在菜单中添加语言切换器。 调用此函数时,我们有 $items 字符串,其中包含所有菜单项。 我将所有菜单项从 $items 转移到 $tempitems 并将 $items 设置为空字符串。为什么?因为现在我们可以将小部件作为第一个菜单项或在某些菜单项之间插入。

然后我们分解 $tempitems 字符串,以便我们可以使用另一个订单。

当您现在指定 $id 时,这将成为我们的偏移量。

现在在第一个循环中,在$id 的帮助下,我们将一些临时项添加到空的$items 字符串中,然后是语言小部件,最后是剩余的菜单项。

【讨论】:

【参考方案3】:

即使您使用的是预先开发的themetemplate,也可以创建新模板。

只需从您要使用的模板中复制代码并在您的localhost 上进行相应修改,然后将修改后的副本上传到主题目录。

确保您保留一份副本,以防您将主题更新到较新的版本,因为它会被覆盖。

另一种选择是开发child theme。

【讨论】:

将其放入子主题中即可。这比修改 WP Core 或 WPML Plugin 的核心要好。不知道为什么这被击落得如此猛烈。

以上是关于wordpress在外观的菜单栏里无法创建菜单,并且我提前创建好了分类目录后,菜单栏和文章分类都看不到目录的主要内容,如果未能解决你的问题,请参考以下文章

如何为WordPress的网站建立多级菜单

WordPress添加导航菜单不显示

我有一个wordpress网站“www.thegameofmusic.net”。它尚未完成

WordPress入门 之 设置导航菜单

在我的WordPress菜单项中添加#无法正常工作

去除WordPress菜单上的title描述信息