#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:
Чтобы получить имена терминов для публикации, вы можете использовать любую из этих функций:
Они работают одинаково, но имеют немного разные списки аргументов и, что более важно, 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 конкретной проблемы за раз 🙂 Вы можете добавить новый вопрос для этой проблемы, я предлагаю также привести пример того, что вы хотите сделать, чтобы прояснить ситуацию.