我正在尝试显示基于类别的帖子。 我创建了短代码来显示帖子 [knowledge_sharing cat =“ docs” posts_per_page =“ 5”]
代码:-
function cat_post($atts){
// attributes for shortcode
if (isset($atts['cat'])) {$cat = $atts['cat'];} else {return;}
if (isset($atts['posts_per_page'])) {$posts_per_page = $atts['posts_per_page'];} else {$posts_per_page = -1;}
// get the category posts
$category = get_category_by_slug($cat);
if (!is_object($category)) {return;}
$args = array(
'cat' => $category->term_id,
'posts_per_page' => $posts_per_page,
'post_type' => 'knowledgeSharingDocs',
'order' => 'DESC'
);
$posts = get_posts($args);
// create the list output
if (count($posts) > 0) {
$cat_title = get_the_category($posts->ID);
foreach($cat_title as $cd){
$output .='<div class="category-name do-title dot-symbol ">' .$cd->cat_name. '</div>';
}
$output .= '<div class="category-list">';
foreach ($posts as $post) {
$link = get_permalink($post->ID);
$title = $post->post_title;
$output .='<div class="category-boxs">';
$output .='<div class="category-titles"><a href="'.$link.'">' .$title. '</a></div>';
$output .='<div class="category-decs">' .$post->post_content. '</div>';
$output .='</div>';
}
$output .= '</div>';
return $output;
}
}
以某种方式,此代码仅显示帖子标题和内容,而不显示类别名称。
我希望输出是这样的: 分类名称 发布1 帖子2 发布3
类别名称仅一次。 预先感谢。
答案 0 :(得分:0)
您尝试过吗:
$categories = get_the_category( $post->ID );
var_dump( $categories );
您可以使用 https://developer.wordpress.org/reference/functions/get_the_category/
答案 1 :(得分:0)
您不能在get_the_category()中使用$ posts,因为$ posts是一个包含多个帖子的数组。
首先,您已经有了正确的类别,那么为什么不直接使用它呢?
答案 2 :(得分:0)
这是一个有效的示例,将为您提供帮助。
就像Stefano Pascazi所说的那样,如果您要查询特定类别,则无需使用$cat_title = get_the_category($posts->ID);
,因为查询仅返回特定类别。
但是,如果该类别存在任何子类别,我们可以通过使用以下示例拆分所有类别来显示帖子。
function cat_post($atts){
// attributes for shortcode
if (isset($atts['cat'])) {$cat = $atts['cat'];} else {return;}
if (isset($atts['posts_per_page'])) {$posts_per_page = $atts['posts_per_page'];} else {$posts_per_page = -1;}
// get the category posts
$category = get_category_by_slug($cat);
if (!is_object($category)) {return;}
$args = array(
'cat' => $category->term_id,
'posts_per_page' => $posts_per_page,
'post_type' => 'knowledgeSharingDocs',
'order' => 'DESC'
);
$posts = get_posts($args);
$output = "";
if (count($posts) > 0) {
$op = array();
foreach ($posts as $post) {
$pdata = '';
$link = get_permalink($post->ID);
$title = $post->post_title;
$pdata .='<div class="category-boxs">';
$pdata .='<div class="category-titles"><a href="'.$link.'">' .$title. '</a></div>';
$pdata .='<div class="category-decs">' .$post->post_content. '</div>';
$pdata .='</div>';
$cat_title = get_the_category($post->ID);
$cat_slug = $cat_title[0]->slug;
if( !isset($op[$cat_slug]) )
$op[$cat_slug] = array('first' => '<div class="category-name do-title dot-symbol ">' .$cat_title[0]->cat_name. '</div><div class="category-list">', 'middle' => $pdata, 'last' => '</div>');
else
$op[$cat_slug]['middle'] = $op[$cat_slug]['middle'].$pdata;
}
$output = implode('', array_map(function ($entry) {
return $entry['first'].$entry['middle'].$entry['last'];
}, $op));
}
return $output;
}
add_shortcode( 'knowledge_sharing', 'cat_post' );
echo do_shortcode( '[knowledge_sharing cat="blog" posts_per_page="5"]' );