Wordpress:!$ title($ title)在$ title为空时返回1

时间:2014-02-11 15:48:18

标签: php wordpress

我正在修改一个网站并发现了一个奇怪的怪癖。

在小部件功能(在default-functions.php中找到)代码中,有一行显示:

if ( !empty( $title ) ) { echo $before_title . '[' . $title . '] ' . $after_title; }

function widget( $args, $instance ) {
        extract($args);
        $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base );
        $text = apply_filters( 'widget_text', empty( $instance['text'] ) ? '' : $instance['text'], $instance );
        echo $before_widget;
        if ( !empty( $title ) ) { echo $before_title . '[' . $title . '] ' . $after_title; } ?>
            <div class="textwidget"><?php echo !empty( $instance['filter'] ) ? wpautop( $text ) : $text; ?></div>
        <?php
        echo $after_widget;
    }

如果$ title没有值,!empty($title)的布尔值应该传递0,但由于某种原因,它返回1.我已查看数据库中的所有内容并且无法确定是什么挑战。

(我添加了括号来测试问题)

其他调试:

  • 我关闭了所有插件
  • 我已检查过''的值$title
  • 当我为empty( $instance['title'] )交换empty( $title )时,代码有效(文本小部件上没有标题显示)
  • 当我打印$title时,我看到一个空格。
  • 在另一个WP实例中,我对此代码没有任何问题。

任何想法的朋友?我确实安装了PHP Text Widget,但它使用的是stock textwidget代码库。

3 个答案:

答案 0 :(得分:1)

你可以查看apply_filters做了什么,但我很确定在我的WP相关记忆中它会在传递的值附近添加一些html。

$instance['title']是来自DB的帖子标题的值。

然而,

$titleapply_filters在测试前调用某些行的结果。

因此,您必须针对$instance['title']而非$title

进行测试

答案 1 :(得分:0)

如果empty()检查的字符串有空格,则返回false。你需要使用类似$trimmedTitle = trim($title); if(empty($trimmedTitle)) { doStuff(); }的东西来摆脱空白。

答案 2 :(得分:0)

发现问题。或者我应该说@Otto找到了解决方案。

就在这里:https://core.trac.wordpress.org/ticket/21430

他帮我看了$wp_filter并发现优雅主题(主题制作人)为他们自己的主题在$ title中添加了一个空格。