Первое значение настраиваемого поля (из нескольких), отображаемое дважды после запроса
У меня есть следующий фрагмент кода, который основан на решении этого вопроса:
<?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 . ', '
, потому что следующий бит кода возвращает массив $val.
Если я закомментирую весь php в этом абзаце, я получу знаменитый белый экран. Предположительно, потому что он пытается отобразить какое-то несуществующее значение.
Изначально я думал, что это может быть ошибка, подобная , описанной здесь, поэтому я установил unset() в разных местах, но это, похоже, не влияет ни на что, отображаемое на сайте.
Возможно, я упускаю что-то очевидное, но я действительно не могу понять, почему он возвращает первое значение. Может ли кто-нибудь обнаружить ошибку в коде?
1 answers
Мне удалось это исправить! Как я и подозревал, это не имело никакого отношения к коду, относящемуся к $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'
Просматривая код здесь некоторое время спустя, я заметил кое-что не так. В моем первом echo
вызове я заканчиваю .
, поэтому следующий код может быть добавлено в мой абзац. Но, заканчивая абзац, я добавил новый вызов echo
вместо того, чтобы следовать коду цикла с . '</p>'
.
Что я сделал, чтобы исправить это, так это завершил свой первоначальный вызов echo
вместо его продолжения, поэтому, чтобы исправить это, мне нужно было изменить только один символ и удалить пробел в первой строке, так что это выглядит так:
echo '<p style="color:grey;font-size:11px;margin:0;">(';
Обратите внимание на окончание этого фрагмента кода по сравнению с тем, как он выглядел до того, как я его исправил. Я просто заменил .
на ;
.
Я недостаточно знаю php, чтобы объяснить это поведение, хотя я предполагаю, что это как-то связано с неправильным завершением/закрытием echo
. Если кто-то другой может объяснить более точно, пожалуйста, не стесняйтесь добавлять комментарий, и я соответствующим образом обновлю этот ответ.