Intereting Posts
Правильный способ использования esc_html__ и esc_attr__ и т. Д. Для экранирования значения для перевода Обновление Nightmare – Нет сообщений, разрешений и не может создать новое сообщение массовое загружаемое изображение, затем сделать несколько изображений (галерея) для каждого сообщения? Страница магазина WooCommerce для использования моего пользовательского шаблона Импорт блога Squarespace в WordPress.org Помогите!! Я подключил свой WP WP-CLI методы для get_current_blog_id, get_blog_details или $ wpdb-> prefix Как установить все сообщения в wordpress в одной категории нужна определенная помощь с помощью флажков (выбор / отмена выбора рекомендуемых сообщений) Виджет WordPress: возможно ли сделать форму динамической без обновления? Как создать несколько разных ролей администратора с их собственными возможностями Запуск TinyMCE Как добавить класс в мета-окно Темы поддержки WordPress.org, возвращающиеся 404 Сохранить выпадающий выбор

Как я могу уменьшить количество ifs и else ifs в этом конкретном блоке кода?

У меня есть код в моем цикле, который определит термин в моей пользовательской таксономии, если это конкретный термин, он выведет конкретное изображение.

<?php if( has_term('10', 'review-score' ) ) { ?> <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"> <img src="<?php echo get_stylesheet_directory_uri(); ?> /images/review-scores-thumbs/10.jpeg" /> </a> 

Он работает точно так, как я хочу, чтобы он работал, но после него у меня есть else, если для него есть 9,5, 9, 8,5 … 1. Это еще что-то еще, и я не уверен, что это будет хорошо для скорости моего сайта. Чтобы исправить это, я подумывал о том, чтобы получить термин текущего сообщения (я делаю это внутри настраиваемого цикла страницы архива), а затем делаю что-то вроде этого.

 <?php $term = get_term($post->ID, 'review'score'); ?> <img src="<?php echo get_stylesheet_directory_uri(); ?> /images/review-scores-thumbs/$term.jpeg" /> </a> 

Это будет работать, если мои jpegs все названы так, но у меня две проблемы. get_term странно. Я думал, что он вернет только один термин, но когда я это сделаю.

 <?php $term = get_term($post->ID, 'review-score'); ?> <?php if ($term = '10') { ?> It worked <?php } ?> 

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

Тогда в дополнение к этому, кажется, я не могу

 <?php $term = get_term($post->ID, 'review-score'); ?> <img src="<?php echo get_stylesheet_directory_uri(); ?> /images/review-scores-thumbs/$term.jpeg" /> </a> 

Потому что $ term находится в кавычках.

Итак, что я делаю, возможно? Это даже стоит того (т. Е. Использует все это, если это плохо)? И как работает get_term?

Вы делаете все это неправильно

  • get_term() – неправильная функция, используемая для получения условий, прикрепленных к сообщению. get_term() используется для получения термина object из db для заданного идентификатора термина. Первый параметр принимает термин ID, а не идентификатор сообщения. Вы хотите использовать get_the_terms() чтобы получить условия, прикрепленные к сообщению

  • Вам действительно не нужны какие-либо операторы if / else, просто передайте термин ID / slug / name в качестве имени изображения в зависимости от того, как названы ваши изображения. Для ответа на примеры eact, как в OP, я использовал термин id как имя изображения. Измените это на свои нужды.

  • Как уже было сказано в другом ответе, вам нужно == сравнить два значения: = присваивает значение другому или переменной

Как вы сказали, has_term() работает, поэтому мы можем сделать следующее для решения проблемы: ( Я написал функцию, которую вы можете добавить в функции.phpo, а затем вызовите функцию внутри цикла, где это необходимо )

ЗАМЕТКА:

Весь код не проверен и может быть неисправен. Обязательно протестируйте его на тестовой установке с настройкой отладки в true. Код также требует минимум PHP 5.4

 function get_term_related_image( $taxonomy = 'category' ) { // Invoke the global $post object global $post; // Check if we have a taxonomy and if it is valid, else return false if ( !$taxonomy ) return false; if ( $taxonomy !== 'category' ) $taxonomy = filter_var( $taxonomy, FILTER_SANITIZE_STRING ); // Get the terms assigned to the post $terms = get_the_terms( $post->ID, $taxonomy ); // Make sure we actually have terms, if not, return false if ( !$terms || is_wp_error( $terms ) ) return false; // Get the first term from the array of terms $term = $terms[0]; // Get the image $image = get_stylesheet_directory_uri() . '/images/review-scores-thumbs/' . $term->term_id . '.jpeg'; // Check if we actually have an image before returning it if ( !getimagesize( $image ) ) return false; // We have made it, YEAH!!!, return the image $permalink = get_the_permalink( $post ); $title_attr = the_title_attribute( ['echo' => false, 'post' => $post] ); return '<a href="' . $permalink . '" title="' . $title_attr . '"><img src="' . $image . '"/></a>'; } 

Внутри цикла вы можете просто вызвать функцию следующим образом: ( просто не забудьте передать имя таксономии в качестве первого параметра, если вы не используете сборку в category таксономии )

 echo get_term_related_image( 'review-score' ); 

РЕДАКТИРОВАТЬ:

Код теперь протестирован и работает как ожидалось

Во-первых, давайте get_term фактический рейтинг, get_term требует идентификатора термина, которого у нас нет, поэтому вместо этого используйте wp_get_object_terms

 $terms = wp_get_object_terms($post->ID, 'review-score' ); 

До сих пор код предполагал, что будет один термин, что плохо. Но давайте работать с этим предположением ради этого ответа и говорим, что мы имеем дело только с первым термином:

 if ( !empty( $terms ) && !is_wp_error( $terms ) ) { $term = $terms[0]; 

$terms – это список объектов term, поэтому давайте убедиться, что список не пуст, и что это не ошибка. Если да, то мы не прекратим и сделаем что-нибудь еще.

Здесь $term – это переменная, представляющая объект WP_Term , вы используете WP_Term для хранения оценки обзора, поэтому вам нужно:

  $term->slug 

Вы можете посмотреть это, используя WordPress Codex и официальный центр разработчика.

Вывод термина

В PHP недостаточно указать имя переменной в html, вам нужно повторить ее, так что это не сработает:

 <span>The term is: $term->slug </span> 

Вы не открыли никаких PHP-тегов, поэтому никакой PHP не выполнялся, и вы не поставили эхо-инструкцию, чтобы повторить ее следующим образом:

 <span>The term is: <?php echo $term->slug; ?> </span> 

С помощью этой информации вы сможете исправить свой последний блок кода, чтобы делать то, что вы хотите.

Другие ошибки

 <?php if ($var = '10') { ?> 

Здесь вы сделали задание. Код читает «заставлять $ term равняться тогда, а затем сделать 10 бит», так что это всегда так. Вместо этого используйте == что означает эквивалент, или === что означает ровно равное.

Вместо этого я предлагаю заменить порядок:

 <?php if ( '10' == $var ) { 

Таким образом, если вы случайно наберите = вместо == он будет генерировать ошибку PHP, а не вызывать скрытую логическую ошибку, и проблема будет сразу очевидна