2014-02-11 1 views
1

Я работаю над обновлением сайта и обнаружил странную причуду.

В функции виджета (находится в 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; 
    } 

Булева в !empty($title) предполагается передать 0, если $ название не имеет значения, но для по какой-то причине он возвращает 1. Я посмотрел в базе данных и все и не могу определить, в чем проблема.

(я добавил скобки для проверки вопроса)

Дополнительная отладка:

  • Я выключил все плагины
  • Я проверил и значение '' дается $title
  • Когда я поменял empty($instance['title']) на empty($title), код работает (названия не отображаются в текстовых виджетах)
  • Когда я распечатываю $title, я вижу пробел.
  • В другом экземпляре WP у меня нет проблем с этим кодом.

Любые идеи друзей? У меня есть PHP Text Widget, но он использует базу данных textwidget.

+1

Что такое var_dump ($ title) и var_dump (! Empty ($ title)) print? – Rangad

+0

@Sanford, когда вы говорите, что '' 'присваивается' $ title', вы говорите пустую строку или буквально цитируете? –

+0

@RUJordan Я имею в виду, что в коде (см., Где задан '$ title') есть стандартная пустая строка. Но когда я снова запустил код, на этот раз с помощью 'strcmp' в' $ title' и '$ instance ('title')', два значения, когда они пусты, различны. – Sanford

ответ

0

Если строка, отмеченная пустым(), имеет пробел, то она возвращает false. Вам нужно будет использовать что-то вроде $trimmedTitle = trim($title); if(empty($trimmedTitle)) { doStuff(); }, чтобы избавиться от пробелов.

+0

спасибо за руководство. Реальная проблема заключается в том, что одна платформа (где у меня работает WP), одна и та же кодовая база не вызывает этой проблемы. Поэтому изменение стандартного кода WP не будет работать. И странная вещь - в любом типе виджета вообще нет НИКАКОГО значения. Не уверен, как очистить его, если он находится в базе данных, так как я исследовал базу данных и нет пробелов. – Sanford

1

вы можете проверить, что делает apply_filters, но я вполне уверен в своих воспоминаниях, связанных с WP, что он добавляет некоторые html вокруг значения, которое он передал.

$instance['title'] - значение названия должности, которая поступает из БД.

$title Однако, результат apply_filters вызывает некоторые строки перед испытанием.

Таким образом, вы должны проверить против $instance['title'], а не $title

+0

Итак, я потратил больше времени и теперь понимаю, что ты на что-то. Реальный вопрос заключается в том, почему это NOW дает дополнительное пространство как значение вывода, когда apply_filters должны указывать пробел, когда '$ instance ['title']' также пуст. – Sanford

+0

apply_filters вызывает плагины для обработки значения, которое оно передано. Таким образом, какой-либо плагин, который вы установили или создал, выполняет по умолчанию форматирование по названию даже при пустом. – dweeves

+0

Только у меня проблема, что я отключил все плагины. Поэтому не уверен, что его модифицирует - в середине кода. – Sanford

0

нашел проблему. Или я должен сказать @Otto нашел решение.

Именно здесь: https://core.trac.wordpress.org/ticket/21430

Он помог мне взглянуть на $wp_filter и обнаружить, что Elegant Themes (продюсер темы) добавил пробел в $ название для своей собственной темы.