如果选择多个,则获取主要类别?

时间:2017-03-30 10:19:47

标签: php wordpress

在Wordpress中,我该如何恢复到主要类别?

我使用以下循环,如果检查了所有三个循环,那么它只会恢复到最后一个术语。我想确保它是主要类别。

<?php $term_list = wp_get_post_terms($post->ID, 'category', array("fields" => "names"));
foreach ($term_list as $term) {
    $name = $term;
} ?>

enter image description here

3 个答案:

答案 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
   }
}

参考文献:

https://github.com/sybrew/the-seo-framework/blob/4262ea703eaaa50813d8cd4ac13f4537b5c6a4cc/inc/classes/post-data.class.php#L633

答案 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') ) { }