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