在Wordpress中,我该如何恢复到主要类别?
我使用以下循环,如果检查了所有三个循环,那么它只会恢复到最后一个术语。我想确保它是主要类别。
<?php $term_list = wp_get_post_terms($post->ID, 'category', array("fields" => "names"));
foreach ($term_list as $term) {
$name = $term;
} ?>
答案 0 :(得分:19)
这不是原生的wordpress功能,而是Yoast SEO(see here)的一项功能。
您可以通过以下方式检查主要状态:
<?php
$term_list = wp_get_post_terms($post->ID, 'category', ['fields' => 'all']);
foreach($term_list as $term) {
if( get_post_meta($post->ID, '_yoast_wpseo_primary_category',true) == $term->term_id ) {
// this is a primary category
}
}
?>
如果您使用自定义分类,请使用meta_key
_yoast_wpseo_primary_CUSTOM_TAXONOMY
代替。
答案 1 :(得分:0)
如果您使用的是“ SEO Framework”插件,而不是“ Yoast SEO”:
$taxonomy = 'category';
$post_id = get_the_ID();
$terms = wp_get_post_terms($post_id, $taxonomy, ['fields' => 'all']);
$primary_term = intval(get_post_meta( $post_id, '_primary_term_' . $taxonomy, true ));
foreach($terms as $term) {
if( $primary_term == $term->term_id ) {
// this is a primary category
}
}
参考文献:
答案 2 :(得分:0)
如果您使用了Yoast插件索引和优化功能,那么可接受的答案将无效。
$wpseo_primary_term = new WPSEO_Primary_Term( 'category', get_the_id() );
$wpseo_primary_term = $wpseo_primary_term->get_primary_term();
$term = get_term( $wpseo_primary_term );
这是正确的方法。
要确保如果Yoast被禁用,网站不会中断,则应将代码包装在
中 if ( class_exists('WPSEO_Primary_Term') ) { }