在 Wordpress 主题中使用 sidebar.php

Using sidebar.php within a Wordpress theme

我最近在自建主题上安装了 Woocommerce,但收到一条错误消息,告诉我需要向我的主题添加 sidebar.php 代码。错误消息后面是一个杂乱无章的列表中的小部件列表。这些小部件包括搜索栏、我站点中的页面列表以及档案和类别​​列表。我现在已经按照似乎有效的教程创建了 sidebar.php – 我已经包含了我在下面使用的代码。

我发现不寻常的是,自添加边栏以来,这些小部件似乎已经消失,我现在必须使用外观菜单下的小部件选项卡手动添加它们。我不明白为什么他们会消失?

我一直假设在添加侧边栏时,我必须通过 PHP 代码添加小部件 – 否则侧边栏不会与其他模板冲突吗?例如,我可以为我的商店页面添加 Woocommerce 小部件,但是当我想创建博客文章时,我将需要不同的小部件,而 Woocommerce 小部件仍将位于侧边栏中,反之亦然。

也许我做错了..也许有人能给我指出正确的方向?我一直在谷歌上搜索这个并观看了一些 youtube 教程,但没有找到我正在寻找的答案。

我的代码如下:

functions.php

function enable_widgets() {

    register_sidebar(
        array(
            'name' => 'Main Sidebar',
            'id'   => 'sidebar',
            'description'   => 'Here you can add widgets to the main sidebar.',
            'before_widget' => '<div id="%1$s" class="widget %2$s">',
            'after_widget'  => '</div>',
            'before_title'  => '<h5 id="widget-heading">',
            'after_title'   => '</h5>'
    ));

 }

 add_action('widgets_init','enable_widgets');

sidebar.php

<div class="sidebar">
    <?php dynamic_sidebar('sidebar'); ?>
</div>

在woocommerce/templates/global/sidebar.php中可以看到woocommerce是如何显示侧边栏的。

<?php
if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

get_sidebar( 'shop' ); ?>

它将首先搜索sidebar-shop.php,然后是sidebar.php。 所以你需要做的就是在你的主题文件夹下创建sidebar-shop.php。

并在您的侧边栏-shop.php,显示您已注册的小部件区域。

边栏-shop.php

<div class="sidebar">
    <?php dynamic_sidebar('sidebar'); ?>
</div>

还有另一种使用相同 sidebar.php 显示 woocommerce 特定小部件区域的方法。由于 WooCommerce 有一些 conditional tags,我们可以使用 is_woocommerce() 来确定页面是否使用 WooCommerce 模板。

sidebar.php

<div class="sidebar">
    <?php

    if ( is_woocommerce() ) {
       dynamic_sidebar('sidebar');
    } else {
       dynamic_sidebar('default-sidebar');
    }

   ?>

</div>