Php 如果一篇文章属于多个类别,我想在Genesis post_meta中显示一个主要类别

Php 如果一篇文章属于多个类别,我想在Genesis post_meta中显示一个主要类别,php,wordpress,genesis,Php,Wordpress,Genesis,如果他们的帖子属于多个类别,他们会显示一个主要类别 如何在每篇文章的基础上选择Genesis子主题的文章元中显示的主要类别?自发布之日起,安装(而不是插件) 作为这个答案的补充 将以下内容放入functions.php或更好的函数插件中。不要添加打开的php。在许多位置更改您的前缀 <?php //don't add /** * * Create Metabox and Primary Category Select Field * Requires CMB2 TRUNK bra

如果他们的帖子属于多个类别,他们会显示一个主要类别


如何在每篇文章的基础上选择Genesis子主题的文章元中显示的主要类别?

自发布之日起,安装(而不是插件)

作为这个答案的补充

将以下内容放入functions.php或更好的函数插件中。不要添加打开的php。在许多位置更改您的前缀

<?php
//don't add

/**
 *
 * Create Metabox and Primary Category Select Field
 * Requires CMB2 TRUNK branch NOT the plugin from the repo
 * Install CMB2-trunk.zip via plugin interface or incorporate in your theme, read their docs
 * https://github.com/WebDevStudios/CMB2/branches
 *
 */
function yourprefix_primary_category_selection() {

    $prefix = 'yourprefix_';

    $cmb_demo = new_cmb2_box( array(
        'id'            => $prefix . 'metabox',
        'title'         => esc_html__( 'Primary Category', 'yourtextdomain' ),
        'object_types'  => array( 'post', ),
            'context'       => 'side',
        'priority'      => 'low',
        'show_names'    => false, 
    ) );

    $cmb_demo->add_field( array(
        'name'           => esc_html__( 'Choose Primary Category', 'yourtextdomain' ),
        'desc'           => esc_html__( 'Choose primary category for display in post_meta', 'yourtextdomain' ),
        'id'             => $prefix . 'category_list',
        'taxonomy'       => 'category',
        'type'           => 'taxonomy_select',
    ) );    

}
add_action( 'cmb2_admin_init', 'yourprefix_primary_category_selection' );


/**
 *
 * Add Primary to [post_categories] shortcode replacing the genesis shortcode of the same name
 *
 */
function yourprefix_post_primary_category_shortcode( $atts ) {

    //* get our CMB2 field and category stuff
    $prefix        = 'yourprefix_';
    $primary_cat   = get_post_meta( get_the_ID(), $prefix . 'category_list', true );
    $category_id   = get_cat_ID( $primary_cat );
    $category_link = get_category_link( $category_id );
    $category_name = get_cat_name( $category_id );

    $defaults = array(
        'sep'    => ', ',
        'before' => __( 'Filed Under: ', 'yourtextdomain' ),
        'after'  => '',
    );

    $atts = shortcode_atts( $defaults, $atts, 'post_categories' );

    //* fallback to the standard array if the choice in the primary metabox is not set
    if( empty( $primary_cat ) ) {
        $cats = get_the_category_list( trim( $atts['sep'] ) . ' ' );
    } else {
        $cats = '<a href="' . $category_link . '">' . $category_name . '</a>';
    }

    //* Do nothing if no cats
    if ( ! $cats ) {
        return '';
    }

    if ( genesis_html5() )
        $output = sprintf( '<span %s>', genesis_attr( 'entry-categories' ) ) . $atts['before'] . $cats . $atts['after'] . '</span>';
    else
        $output = '<span class="categories">' . $atts['before'] . $cats . $atts['after'] . '</span>';

    return apply_filters( 'genesis_post_categories_shortcode', $output, $atts );

}
add_shortcode( 'post_categories', 'yourprefix_post_primary_category_shortcode' );

这里有一个简单的解决方案

使用SEO Yoast免费插件。当有多个类别分配给一篇文章时,它可以帮助您将任何类别设置为主要类别

有关主要cat选择,请参见插件界面:

然后在您的WP主题中,在函数文件中具有以下函数,然后您可以在任何位置使用以回显类别名称:


+1出于某种原因,提出这个问题的人不想依赖插件。他可能会使用另一个SEO插件,尽管其他插件不能像Yoast那样跟上它。。。
// wp seo yoast get primary category name 

function taxo_primary_term_name($taxo){

  $wpseo_primary_term = new WPSEO_Primary_Term($taxo, get_the_ID());
  $wpseo_primary_term = $wpseo_primary_term->get_primary_term();

  return $wpseo_primary_term = get_term($wpseo_primary_term)->name;
}