В моей теме WordPress Taxonomy = my-category и категории - это AB,AC,AD и т. д. Для пользовательского типа сообщения.
Я хочу напечатать значки для пользовательских категорий, и использование оператора if & else внутри wp_query на index.php ниже - мой код.
$args = array(
'post_type' => 'mycpt',
'posts_per_page' => 10,
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while( $query->have_posts() ) {
$query->the_post();
the_content();
if ($term_id === 10){
echo '<p class = "icon-gear"></p>';
}
else if ($term_id === 11){
echo '<p class = "icon-star"></p>';
}
else if ($term_id === 12){
echo '<p class = "icon-tv"></p>';
}
//and continuous ..............
}
}
CSS
.icon-gear:before { background:url('gear.svg') no-repeat; }
.icon-star:before { background:url('star.svg') no-repeat; }
.icon-tv:before { background:url('tv.svg') no-repeat; }
Как напечатать значок svg для категорий таксономии?
Откуда вы берете $term_id?
@ikdekker ничего не показывает. пустое поле без ошибок
если вы просматриваете html, глядя на источник страницы, появились ли элементы <p>? если да, можете попробовать удалить: before из css.
@ikdekker в источнике страницы пусто. <p> не показывает
Хорошо, можете ли вы убедиться, что $ term_ids совпадают с 10 и 11
Когда я перехожу на страницу редактирования категории, я получаю term_id из адресной строки браузера. localhost/wordpress/term.php?taxonomy=my-category&tag_ID=10&post_type=mycpt&wp_ht.......
Я думаю, где вы устанавливаете свою переменную $term_id - что-то вроде $termArray = get_the_terms(get_the_ID(), 'my-category'); $term_id = $termArray[0];
^ внутри вашего шлейфа while
если вы сейчас используете var_dump($term_id);, вы получаете число, логическое значение (ложь) или строку?
@Stender я получаю NULL
@ikdekker да term_ids совпадают и исправляются
@ F.A. Если вы получаете NULL, это означает, что он не знает, что вы ищете - вам нужно установить переменную, прежде чем вы сможете ее проверить.






Я думаю, что это неправильный способ, и его невозможно обслуживать.
Лично я хотел бы изучить возможность использования настраиваемых полей для добавления текстового поля в ваши категории, и вы можете установить значок для каждого из них через панель управления. Затем вам просто нужно отобразить одно настраиваемое поле во время цикла и по умолчанию использовать пустой значок / значок по умолчанию, если он пуст.
Загляните в плагин Advanced Custom Fields, если вы еще не используете его.
Хотелось бы добиться без плагина. возможно?
Да, с ACF было бы намного проще, но если вы предпочитаете не иметь плагина, взгляните на это руководство: pippinsplugins.com/adding-custom-meta-fields-to-taxonomies
Проблема в том, что каждый плагин, включая ACF, показывает изображения только на taxonomy.php или category.php, но не в индексе. Уже упоминалось о необходимости печати на index.php
ACF должен иметь возможность делать это и с индексом - когда вы запрашиваете по индексу, он также отображается как кошка и налог.
Протестированный код, попробуйте это
$args = array(
'post_type' => 'mycpt',
'posts_per_page' => 10,
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while( $query->have_posts() ) {
$query->the_post();
the_content();
$terms = get_the_terms( $post->ID, 'my-category');
foreach ( $terms as $term ) {
$termID[] = $term->term_id;
}
if ($termID[0] === 10){
echo '<p class = "icon-gear"></p>';
}
else if ($termID[0] === 11){
echo '<p class = "icon-star"></p>';
}
else if ($termID[0] === 12){
echo '<p class = "icon-tv"></p>';
}
//and continuous ..............
}
}
если вы собираетесь использовать подобное «если», используйте вместо этого переключатель. Вы также можете избежать дублирования кода, произнеся
switch ($term_id) case 10: $icon = "star";, а затемecho "<p class='icon-$icon'";. Можете ли вы сказать, что происходит не так? Потому что вы говорите то, что хотите, а не то, что сейчас происходит.