为什么我的侧边栏没有在单元测试中注册

时间:2013-04-19 作者:Christopher Lamm

我正在尝试对我在主题中使用的函数进行单元测试,以注册侧栏。

这是函数中的函数。php。

function fp_register_sidebars() {
register_sidebar( array(
    \'name\' => __( \'Sidebar 1\', \'fp\' ),
    \'id\' => \'sidebar1\',
    \'before_widget\' => \'<div id="%1$s" class="widget %2$s">\',
    \'after_widget\' => \'</div>\',
    \'before_title\' => \'<h4 class="widget-title">\',
    \'after_title\' => \'</h4>\'
) );

register_sidebar( array(
    \'name\' => __( \'Sidebar 2\', \'fp\' ),
    \'id\' => \'sidebar2\',
    \'before_widget\' => \'<div id="%1$s" class="widget %2$s">\',
    \'after_widget\' => \'</div>\',
    \'before_title\' => \'<h4 class="widget-title">\',
    \'after_title\' => \'</h4>\'
) );
}

add_action( \'widgets_init\', \'fp_register_sidebars\' );
下面是单元测试方法。

function test_fp_register_sidebars() {
    do_action( \'widgets_init\' ); // Run the widgets_init hook

    /** @var array $sidebars Array containing all active sidebars and their widgets. */
    $sidebars = wp_get_sidebars_widgets();

    $this->assertTrue( array_key_exists( \'sidebar1\', $sidebars ), \'Sidebar 1 is registered at the widgets_init hook.\' );
    $this->assertTrue( array_key_exists( \'sidebar2\', $sidebars ), \'Sidebar 2 is registered at the widgets_init_hook.\' );
}
单元测试失败。我发现侧边栏并没有从2013年的侧边栏更新到这个主题的侧边栏(它们停留在侧边栏1和侧边栏2)。我正在使用switch\\u theme()切换到单元测试类setUp()方法中的主题,这是成功的。

在WordPress环境中激活主题确实可以正确注册这些侧栏,因此我认为这与switch\\u theme()的工作方式有关。

1 个回复
SO网友:tfrommen

首先,你可以(应该?)注册侧栏通常不需要特定的挂钩(和widgets_init 可能不是最好的)。其次,您不需要指定ID,因为它们是自动生成的。当然可以,但也没有必要。

只需在您的functions.php:

register_sidebar( array(
    \'name\' => __( \'Sidebar 1\', \'fp\' ),
    // \'id\' => \'sidebar1\',
    \'before_widget\' => \'<div id="%1$s" class="widget %2$s">\',
    \'after_widget\' => \'</div>\',
    \'before_title\' => \'<h4 class="widget-title">\',
    \'after_title\' => \'</h4>\',
) );

register_sidebar( array(
    \'name\' => __( \'Sidebar 2\', \'fp\' ),
    // \'id\' => \'sidebar2\',
    \'before_widget\' => \'<div id="%1$s" class="widget %2$s">\',
    \'after_widget\' => \'</div>\',
    \'before_title\' => \'<h4 class="widget-title">\',
    \'after_title\' => \'</h4>\',
) );
要检查当前小部件中所有已注册的边栏(以及非活动的边栏等),只需执行以下操作:

$sidebars = wp_get_sidebars_widgets();
echo \'<pre>\'.print_r($sidebars, true).\'</pre>\';
要检查给定的侧栏ID,可以执行以下操作(就像您所做的那样):

if (array_key_exists(\'sidebar1\', $sidebars))
    echo \'Sidebar 1 is registered.\';
关于旧边栏的问题。只要侧边栏中有小部件,它们就被存储(作为数组)用于相应的侧边栏ID。如果您想在主题之间共享侧边栏小部件设置,您必须注册相同的侧边栏(ID)。

结束

相关推荐

How to use Plupload in themes

我正在开发一个需要从前端上传的主题。我想将plupload整合到我的主题中,同时牢记:上传将在表单提交时处理,而不是通过plupload常规方法。这意味着我只需要plupload的设计,而不是上传功能。选择文件后,当我提交表单(包含所选文件和其他信息)时,我应该能够获取目标页面中的所有表单信息(包括文件信息)。E、 g.在用户配置文件页面中,我想更新我的头像以及其他信息</如有任何帮助,我们将不胜感激。