WordPress/ACF: get_category(); для родительской категории

#php #wordpress #categories #advanced-custom-fields #wysiwyg

#php #wordpress #Категории #дополнительно-пользовательские-поля #wysiwyg

Вопрос:

Я использую поле редактора ACF Wysiwyg, чтобы иметь возможность написать дополнительный текст для страниц моей категории. Я повторяю текст, используя category.php

Сначала я думал, что могу просто повторить get_field, но обнаружил, что мне нужно передать категорию. Поэтому я использовал get_the_category(). Но по какой-то причине код работает только для дочерних категорий:

example.com/category/parent/child / <- работает example.com/category/parent / <- не работает

Я также пробовал с помощью wp_get_post_categories(); но безуспешно. Чего мне не хватает??

 <?php

$category = get_the_category();

$extra_text = get_field('ekstra_tekstfelt', $category[0] );
?>

<p> <?php echo $extra_text ?></p>
  

Я попробовал print_r ($ category), где дочерняя и родительская категории дали мне массив:

Дочерняя категория

 Array ( [0] => WP_Term Object ( [term_id] => 27 [name] => Tilbehør [slug] => tilbehor [term_group] => 0 [term_taxonomy_id] => 27 [taxonomy] => category [description] => [parent] => 1 [count] => 31 [filter] => raw [cat_ID] => 27 [category_count] => 31 [category_description] => [cat_name] => Tilbehør [category_nicename] => tilbehor [category_parent] => 1 ) )
  

Родительская категория

 Array ( [0] => WP_Term Object ( [term_id] => 46 [name] => Bagværk [slug] => bagvaerk [term_group] => 0 [term_taxonomy_id] => 46 [taxonomy] => category [description] => [parent] => 1 [count] => 16 [filter] => raw [cat_ID] => 46 [category_count] => 16 [category_description] => [cat_name] => Bagværk [category_nicename] => bagvaerk [category_parent] => 1 ) [1] => WP_Term Object ( [term_id] => 16 [name] => Dessert [slug] => dessert [term_group] => 0 [term_taxonomy_id] => 16 [taxonomy] => category [description] => [parent] => 1 [count] => 22 [filter] => raw [cat_ID] => 16 [category_count] => 22 [category_description] => [cat_name] => Dessert [category_nicename] => dessert [category_parent] => 1 ) )
  

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

1. Первое, на что следует обратить внимание, это то, что вы должны использовать get_field() вместо the_field() здесь, поскольку the_field() на самом деле повторяется сразу, поэтому он не используется, когда вы пытаетесь сохранить переменную. также — get_the_category отсутствует его () и обычно используется для объектов post — вы могли бы попробовать использовать get_queried_object() , чтобы попытаться получить объект категории.

2. также — вы уверены, что поле родительского cat заполнено? и использует ли он тот же файл cat? или он использует archive.php ?

3. Спасибо тебе, Стендер. Мои извинения. Я использовал get_field и get_the_category();… get_queried_object сломал сайт и выдал мне ошибку. Я только что попробовал с простым echo на category.php и это вышло как на родительской, так и на дочерней кошке. Да, поле родительского кота заполнено.

4. Выяснил, почему get_queried_object(); ломал сайт… Поскольку я использовал $category[0] — Deleted [0], и это дало мне тот же результат: работает для дочерней категории, но не для родительской.

Ответ №1:

Просматривая ваш код, кажется, все в порядке, но нужно проверить, получаем ли мы значения для каждой переменной или нет, являются ли поля acf пустыми или нет?

Ниже приведен пример с официального сайта ACF. В своем коде вы можете убедиться, что получаете правильный объект второго передаваемого вами аргумента.

  // get the current taxonomy term
 $term = get_queried_object(); // or other way where you get the category term object
 // example
 $image = get_field('image', $term);
 $color = get_field('color', $term);
 echo $color;
 echo $image;
  

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

1. Спасибо! Я пробовал с помощью get_queried_object(); но результат тот же… Работает для дочерней категории, но не родительской :/

2. Попробуйте распечатать объект. получаете ли вы объект с правильными данными?

3. В вашем коде попробуйте напечатать $category для дочерней категории и родительской категории

4. оба дают мне массив… Я обновил вопрос 🙂

5. Я бы попросил попробовать вот так $taxonomy . '_' . $term_id . Например category_123 , вместо передачи термина object