Intereting Posts
Доступ к значениям для отображения на странице заказа. Как добавить настраиваемое поле к существующему типу сообщений? Как фильтровать статическую почтовую страницу с помощью ajax и $ wp_query «Поддержать этот плагин» для WordPress.org. Выход формы вне контейнера Получить первую функцию изображения Как добавить имя, фамилию и название компании в мою регистрационную форму Список сообщений по их пользовательскому термину таксономии с условием Сопоставление доменов для перенаправления WordPress MU и https – Как это сделать? Меню администратора WordPress для страниц «admin.php» Какие методы использовать для создания небольших редактируемых фрагментов текста для статических страниц? Сортировать по категориям Доступ запрещен при входе в систему как администратор Обновление до 3.1 – Неустранимая ошибка: вызов неопределенной функции wp_cache_get () mysqli_real_connect () – метод проверки подлинности, неизвестный клиенту. Предупреждения

Первое значение настраиваемого поля (из нескольких) отображается дважды после запроса

У меня есть следующий код, основанный на решении этого вопроса :

<?php $game_titles = get_terms('game'); foreach($game_titles as $game_title) { wp_reset_query(); $args = array('post_type' => 'release', 'tax_query' => array( array( 'taxonomy' => 'game', 'field' => 'slug', 'terms' => $game_title->slug, ), ), ); unset($game_titles); $loop = new WP_Query($args); if($loop->have_posts()) { echo '<h2>' . $game_title->name . '</h2>'; echo '<ul>'; unset($game_title); unset($args); while($loop->have_posts()) : $loop->the_post(); echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>'; echo '<p style="color:grey;font-size:11px;margin:0;">(' . $number = intval(get_post_meta(get_the_ID(), 'number', true)); if($number > 1){ echo $number . 'x'; } $format_value = get_post_meta(get_the_ID(), 'format', true); foreach($format_value as $key => $val){ echo $val . ', '; } unset($val); $version_value = get_post_meta(get_the_ID(), 'version_desc', true); foreach($version_value as $key => $val){ echo $val . ', '; } unset($val); $color = get_post_meta(get_the_ID(), 'vinyl_color', true); if($color != 'Black'){ if($color != ''){ echo ' / ' . $color; } } $country_value = get_post_meta(get_the_ID(), 'country', true); if(! empty($country_value)){ echo ' / ' . $country_value . ', '; } else{ echo ' / '; } $year_value = get_post_meta(get_the_ID(), 'release_year', true); if(! empty($year_value)){ echo $year_value; } $catno_value = get_post_meta(get_the_ID(), 'catalog_no', true); if(! empty($catno_value)){ echo ' / ' . $catno_value; } echo ')</p>'; endwhile; echo '</ul>'; } } ?> 

Теперь я получаю список всех терминов в таксономии game и ниже каждого термина я получаю заголовок и постоянную ссылку на каждое сообщение, связанное с этим термином. Эти части прекрасно работают.

Проблема заключается в небольшом абзаце, который я хотел бы вернуть ниже каждого заголовка / ссылки. По какой-то причине он возвращает первое значение в параграфе дважды.

Т.е. для бита кода, который читает:

 $number = intval(get_post_meta(get_the_ID(), 'number', true)); if($number > 1){ echo $number . 'x'; } 

Если $ number = 1, он отобразит 1 (который является $number ), когда он не должен показывать ничего. Если $ number = 2, будет отображаться 22x (это $number . $number . 'x' ), когда оно должно отображаться 2x .

Если я полностью закомментирую бит кода, используя $ number, он вернет 'Array' . $val . ', ' 'Array' . $val . ', ' 'Array' . $val . ', ' , потому что следующий бит кода возвращает массив $ val.

Если я прокомментирую все php в абзаце, я получу знаменитый белый экран. Предположительно потому, что он пытается отобразить некоторое несуществующее значение.

Первоначально я думал, что это может быть ошибка, подобная той, которая объясняется здесь , поэтому я отключил (), размещенный в разных местах, но это, похоже, не влияет на что-либо, отображаемое на сайте.

Я мог бы пропустить что-то очевидное, но я действительно не могу понять, почему он возвращает первое значение. Может ли кто-то обнаружить ошибку в коде?

Solutions Collecting From Web of "Первое значение настраиваемого поля (из нескольких) отображается дважды после запроса"

Мне удалось это исправить! Поскольку я подозревал, что это не имеет никакого отношения к коду, относящемуся к $number , а скорее к вызову echo перед ним.

Мой исходный код выглядел так (я пропускаю часть содержимого цикла, чтобы он был простым):

 echo '<p style="color:grey;font-size:11px;margin:0;">(' . $number = intval(get_post_meta(get_the_ID(), 'number', true)); if($number > 1){ echo $number . 'x'; } echo ')</p>'; 

Если $number = 1 он будет отображать $number а если $number > 1 ), он отобразит $number . $number . 'x' $number . $number . 'x'

Просматривая код здесь через некоторое время, я заметил что-то. В моем первом echo вызове я заканчиваю с . поэтому в моем абзаце можно добавить следующий код. Но, закончив абзац, я добавил новый echo вызов вместо того, чтобы следить за кодом цикла . '</p>' . '</p>' .

То, что я сделал, чтобы исправить это, заключалось в том, чтобы закончить мой первоначальный echo вызов, а не продолжать его, поэтому, чтобы исправить это, мне нужно было только изменить один символ и удалить пробел в первой строке, чтобы он выглядел так:

echo '<p style="color:grey;font-size:11px;margin:0;">(';

Обратите внимание на окончание этой части кода по сравнению с тем, как она выглядела, прежде чем я ее исправил. Я просто заменил . с ; ,

Я не знаю достаточно php, чтобы объяснить это поведение, хотя я предполагаю, что он имеет отношение к тому, чтобы не заканчивать / закрывать echo должным образом. Если кто-то еще может объяснить более точно, пожалуйста, не стесняйтесь добавлять комментарий, и я буду соответствующим образом обновлять этот ответ.