WordPress: get_terms () ничего не возвращает, даже если у терминов есть объекты

Обычное поведение get_terms — не возвращать условия, если не назначено ни одного сообщения. Но это не тот случай, я вижу термины, назначенные в админке, а также проверил базу данных, и все выглядит нормально. Также проверьте этот код:

$p = get_post(5018); // correctly returns the post

// works: returns the assigned term
$post_terms = wp_get_post_terms($p->ID, 'solutions_sectors', array("fields" => "all"));

// now the opposite:
$first = $post_terms[0];
$tid = $first->term_id;
// works: gives a list of post ids
$term_posts = get_objects_in_term($tid, 'solutions_sectors');

// still, this will output an empty array:
$terms = get_terms(array('taxonomy' => 'solutions_sectors');

// while this will output the right array (obviously):
$terms = get_terms(array('taxonomy' => 'solutions_sectors', 'hide_empty' => false));

Итак, мои посты действительно имеют условия, но get_terms, кажется, не осознает этого. Зачем?

Пожалуйста, обратите внимание на следующее:

  • Я использую пользовательские типы сообщений с пользовательскими таксономиями

  • Я использую Polylang как плагин для языков (но все сообщения и термины, кажется, правильно переведены и назначены)

0

Решение

Обнаружил проблему: поле count таблицы term_taxonomy было пустым, и это потому, что я массово сохранил свои сообщения, используя wp_insert_post() во время пользовательского импорта.

wp_insert_post() похоже, есть ошибка: он правильно применяет указанные термины к новому сообщению, но не обновляет счет term_taxonomy.

Решением здесь является одноразовый вызов wp_update_term_count_now () `.

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

add_action('init','reset_counts', 11, 0);
function reset_counts(){
// I'm currently using polylang so first I get all the languages
$lang_slugs = pll_languages_list(array('fields' => 'slug'));

foreach($lang_slugs as $lang){
$terms_ids = get_terms(array(
'taxonomy' => 'solutions_sectors'
,'fields' => 'ids'
,'lang' => $lang
,'hide_empty' => false
));

// it's important to perform the is_array check
if(is_array($terms_ids)) wp_update_term_count_now($terms_ids, 'solutions_sectors');
}
}

Это добилось цели. После запуска важно закомментировать вызов действия init.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]