我正在修改一个网站并发现了一个奇怪的怪癖。
在小部件功能(在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
时,我看到一个空格。任何想法的朋友?我确实安装了PHP Text Widget,但它使用的是stock textwidget代码库。
答案 0 :(得分:1)
你可以查看apply_filters
做了什么,但我很确定在我的WP相关记忆中它会在传递的值附近添加一些html。
$instance['title']
是来自DB的帖子标题的值。
$title
是apply_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中添加了一个空格。