如果帖子属于多个类别,我想在Genesis post_meta中显示主要类别

时间:2017-01-30 00:18:49

标签: php wordpress genesis

https://broadly.vice.com/en_us上,如果他们的帖子属于多个类别,则会显示单个主要类别。

如何在帖子的基础上选择在Genesis Child主题的post_meta中显示的主要类别?

2 个答案:

答案 0 :(得分:2)

这是一个简单的解决方案。

使用SEO Yoast免费插件https://wordpress.org/plugins/wordpress-seo/。当分配给帖子的多个类别时,这可以帮助您将任何类别设为主要类别。

请参阅插件的主要猫选择界面: Select Primary Category for the post

然后在你的WP主题中在函数文件中有以下函数,然后你可以用它来回显类别名称:<?php echo taxo_primary_term_name; ?>

// 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;
}

答案 1 :(得分:0)

截至此发布日期,请安装Trunk version of CMB2(不是插件)。

enter image description here

See See Gist备份此答案。

将以下内容放在你的functions.php中,或者更好的是你的函数插件。不要添加开放的PHP。在许多地方更改yourprefix_

<?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' );