如何避免使用wp_NAV_MENU重复查询?

时间:2019-10-04 作者:Star Light

我的主题需要在主页中呈现2个菜单。其余页面只需要一个。结果是,只有主页收到重复查询警告。追踪后,我发现这是wp_nav_menu. 如何避免此问题?

以下是我的重复警告屏幕截图:The duplicated query

SELECT t.*, tt.*
FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt
ON t.term_id = tt.term_id
WHERE t.term_id = 163
及其调用方:

Lucidy\\header()
可湿性粉剂内容/主题/Lucidy/引擎/链接器。php:86 Lucidy\\render()
可湿性粉剂内容/主题/Lucidy/引擎/链接器。php:79

  • Lucidy\\load()
    wp内容/主题/Lucidy/引擎/链接器。菲律宾:48wp_nav_menu()
    wp包括/nav菜单模板。php:120 wp\\u get\\u nav\\u menu\\u object()
    wp includes/nav menu。php:26获取术语(wp includes/taxonomy)。php:834 WP\\u Term::get\\u instance()
    WP包括/class WP Term。php:131根据调试器,潜在的麻烦制造者是get_term_linkget_term_field. 然而,我可以非常肯定的是,我不会直接使用它们。必须从wp_nav_menu. 这个wp_nav_menu 是主要嫌疑犯,因为在其他页面(如存档页面或单数页面)中,我找不到任何重复警告。

    这是核心bug吗?不管怎样,我该如何避免呢?我的主题最近很慢(主页的渲染时间高达0.30到0.60秒),所以我非常想优化它。

    [更新5-Otc]抱歉,我忘了分享我的菜单信息。我实际上有3个菜单位置,其中2个放在主页上。在我使用的主页上wp_nav_menu 2次。

    我在functions.php:

    register_nav_menus([
        \'menu_col\' => __(\'Menu Column\', \'lucidy\'),
        \'menu_list\' => __(\'Menu List\', \'lucidy\'),
        \'menu_bar\' => __(\'Menu Bar\', \'lucidy\')
    ]);
    

  • 1 个回复
    SO网友:Dallas Price

    您可以通过创建另一个菜单和菜单位置来避免它。你可以用一个小部件区域或任何东西来实现这一点。然后,仅当页面是带有is\\u home()或is\\u front\\u page()的主页(如果是页面)时,才调用菜单。

    这是2017年的一个例子。

    register_nav_menus(
        array(
            \'top\'    => __( \'Top Menu\', \'twentyseventeen\' ),
            \'social\' => __( \'Social Links Menu\', \'twentyseventeen\' ),
        )
    );
    
    然后它被称为:

    <?php if ( has_nav_menu( \'top\' ) ) : ?>
        <div class="navigation-top">
            <div class="wrap">
                <?php get_template_part( \'template-parts/navigation/navigation\', \'top\' ); ?>
            </div>
    
    不过,您几乎可以在小部件区域中放置您想要的任何内容。我用它们只是为了以防万一,我想把别的东西粘在那里。

    在您的情况下,菜单是“正确”的方式。