Wordpress:get_terms() 即使术语有对象也不返回任何内容
Wordpress: get_terms() not returning anything even if terms have objects
如果没有分配给 post,则 get_terms 的正常行为不适用于 return 条款。但事实并非如此,我可以在管理员中看到分配的条款,还检查了数据库,一切似乎都很好。还要检查此代码:
$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));
所以,我的 post 确实有条款,但 get_terms 似乎没有意识到。为什么?
请注意以下事项:
我正在使用具有自定义分类法的自定义 post 类型
我正在使用 polylang 作为语言插件(但所有 post 和术语似乎都已正确翻译和分配)
发现问题:term_taxonomy table 的计数字段为空,这是因为我在 post 期间使用 wp_insert_post()
批量保存了我的 post自定义导入。
wp_insert_post()
似乎有一个错误:它正确地将指定的术语应用于新的 post 但不会更新 term_taxonomy 计数。
此处的解决方案是一次性调用 wp_update_term_count_now()`。
由于我必须检索在创建分类法之前执行的文件中的所有术语 ID,因此我必须将代码包装在 init 操作中。
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 操作调用很重要。
如果 get_terms
由于某些奇怪的原因不起作用,自定义分类法未显示已注册尝试使用 WP_Term_Query
:
$term_query = new WP_Term_Query( array(
'taxonomy' => 'regions', // <-- Custom Taxonomy name..
'orderby' => 'name',
'order' => 'ASC',
'child_of' => 0,
'parent' => 0,
'fields' => 'all',
'hide_empty' => false,
) );
// Show Array info
echo "<pre>";
print_r($term_query->terms);
echo "</pre>";
//Render html
if ( ! empty( $term_query->terms ) ) {
foreach ( $term_query ->terms as $term ) {
echo $term->name .", ";
echo $term->term_id .", ";
echo $term->slug .", ";
echo "<br>";
}
} else {
echo '‘No term found.’';
}
从这里获取所有参数:https://developer.wordpress.org/reference/classes/WP_Term_Query/__construct/
如果没有分配给 post,则 get_terms 的正常行为不适用于 return 条款。但事实并非如此,我可以在管理员中看到分配的条款,还检查了数据库,一切似乎都很好。还要检查此代码:
$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));
所以,我的 post 确实有条款,但 get_terms 似乎没有意识到。为什么?
请注意以下事项:
我正在使用具有自定义分类法的自定义 post 类型
我正在使用 polylang 作为语言插件(但所有 post 和术语似乎都已正确翻译和分配)
发现问题:term_taxonomy table 的计数字段为空,这是因为我在 post 期间使用 wp_insert_post()
批量保存了我的 post自定义导入。
wp_insert_post()
似乎有一个错误:它正确地将指定的术语应用于新的 post 但不会更新 term_taxonomy 计数。
此处的解决方案是一次性调用 wp_update_term_count_now()`。
由于我必须检索在创建分类法之前执行的文件中的所有术语 ID,因此我必须将代码包装在 init 操作中。
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 操作调用很重要。
如果 get_terms
由于某些奇怪的原因不起作用,自定义分类法未显示已注册尝试使用 WP_Term_Query
:
$term_query = new WP_Term_Query( array(
'taxonomy' => 'regions', // <-- Custom Taxonomy name..
'orderby' => 'name',
'order' => 'ASC',
'child_of' => 0,
'parent' => 0,
'fields' => 'all',
'hide_empty' => false,
) );
// Show Array info
echo "<pre>";
print_r($term_query->terms);
echo "</pre>";
//Render html
if ( ! empty( $term_query->terms ) ) {
foreach ( $term_query ->terms as $term ) {
echo $term->name .", ";
echo $term->term_id .", ";
echo $term->slug .", ";
echo "<br>";
}
} else {
echo '‘No term found.’';
}
从这里获取所有参数:https://developer.wordpress.org/reference/classes/WP_Term_Query/__construct/