Название термина отображения объекта Post

#wordpress #advanced-custom-fields #taxonomy-terms

#wordpress (wordpress ) #расширенные пользовательские поля #таксономия-термины #wordpress

Вопрос:

Как я могу показать название термина, которое связано с сообщением объекта post (ACF)?

С помощью этого кода я могу видеть название этого поста:

 get_the_title( get_field('which_game')->ID );
  

Комментарии:

1. Не могли бы вы дать нам немного больше информации о том, что вам нужно, например, название категории, название тега или пользовательская таксономия? Кроме того, сообщения могут содержать более одного связанного термина, так что вы хотите получить их все?

2. @FluffyKitten это пользовательская таксономия, которая подключается к сообщению.

3. Хорошо, как называется таксономия, и что делать, если существует более одного термина?

4. @FluffyKitten привет, это «провайдер», и он всегда только один. Я редактирую вопрос, добавляя немного больше кода, единственное, что отображает все термины в пользовательской таксономии.

Ответ №1:

Чтобы получить имена терминов для публикации, вы можете использовать любую из этих функций:

  1. wp_get_post_terms wp_get_post_terms
  2. get_the_terms получить_the_terms

Они работают одинаково, но имеют немного разные списки аргументов и, что более важно, get_the_terms работают с кэшированными данными (что делает их быстрее), в то время как wp_get_post_terms этого не делает.

 $postObj = get_field('which_game');

// DEPENDING ON WHICH FUNCTION YOU WANT TO USE:
$terms = get_the_terms( $postObj->ID, 'provider');
// OR 
$terms = wp_get_post_terms( $postObj->ID, 'provider' array( 'fields' => 'name') );

// Both functions return arrays, even if there is just 1 term
// so loop through the terms returned to add the names to an array
foreach ($terms as $term) 
    $term_names[] = $term->name;

// turn the array into a comma-separated string (of just the name on its own if there is just 1)
$term_name_str =  implode("','",$term_names);
  

Если вы уверены, что у вас будет только 1 термин, вы могли бы просто проверить, есть ли какие-либо возвращенные результаты, а затем получить первый:

 if (count($terms) > 1) 
    $term_name_str = $terms[0]->name;
  

Однако первый пример хорошо работает всего для 1 термина и является более гибким.

Примечание — этот код непроверен, поэтому в нем может быть несколько синтаксических ошибок, но основная концепция верна.

Комментарии:

1. Он не работает, он ничего не отображает, я использовал первые $ terms. Я думаю, проблема в том, что если я сделаю ‘$string .= $postObj-> ID;’ я также не вижу никакого идентификатора?

2. @Maanstraat Что такое $string .= $postObj->ID; ? В вашем вопросе этого нет. Также вы изменили имена переменных, чтобы все они были либо $post_object или $postObj ? Кроме того, вы проверили идентификатор, выполнив var_dump( get_field('which_game')->ID); var_dump( $postObj->ID); ?

3. Глупо с моей стороны, я вижу, что теперь он выдает заголовок «основного» поста, а не поста, с которым я его связал! Итак, у меня есть тип сообщения A и тип сообщения B в типе сообщения A у меня есть поле «Post Object», созданное для ссылки на сообщение из типа сообщения B. Итак, теперь я хочу показать информацию из сообщения в типе сообщения B в тип сообщения A. я уже выбрал сообщение в типе сообщения A, поэтому они подключены.

4. @Maanstraat Я не совсем понимаю, что вы хотите там сделать, но не похоже, что это связано с получением имен терминов? Похоже, что это другой вопрос, и каждый вопрос по SO должен касаться 1 конкретной проблемы за раз 🙂 Вы можете добавить новый вопрос для этой проблемы, я предлагаю также привести пример того, что вы хотите сделать, чтобы прояснить ситуацию.