我有一个名为“投资”的CPT,我想按类别显示该CPT中的所有帖子。我是通过短代码来实现的。
e.g. [myshortcode type_of_post="investment" cat="12,30"]
我希望它显示如下帖子
Category 12
- post1
- post2
Category 30
<我现在的问题是,它显示了所有的帖子,但我很难按类别将帖子分开。现在就是这样
这是我的代码
// define attributes
extract( shortcode_atts( array (
\'cat\' => \'\',
\'type_of_post\' => \'\',
\'orderby\' => \'date\',
), $atts ) );
独立岗位
if($type_of_post){
$args[\'post_type\'] = $type_of_post;
}
if($cat) {
$args[\'category__in\'] = array_map(\'intval\',explode(\',\',$cat));
}
查询
$query = new WP_Query( $args );
if( $query->have_posts() ){
echo "<div class=\'row col-div investment\'>";
while( $query->have_posts() ){
$query->the_post();
$id = get_the_ID();
$page = get_post($id);
$image = get_the_post_thumbnail_url($id);
display_layout($page,$image); //calls the function below
}
echo \'</div>\';
}
显示立柱
function display_layout($page,$image) {
echo "<div class=\'col-sm-6 pair-cards\'>
<div class=\'sub-div\'>
<div class=\'card-img\'>
<a href=\'$page->post_name\'><img src=\'$image\' alt=\'$page->post_name\' /></a>
</div>".
"<div class=\'entry-title\'><a href=\'$page->post_name\'>" . $page->post_title . "</a></div>
<div class=\'card-desc\'>".
"<p>" . strip_tags($page->post_excerpt) ."</p>
</div>
<div class=\'read-more\'>
<a href=\'$page->post_name\'> Read More </a>
</div>
</div>
</div>";
}
我希望我已经把我的问题解释清楚了。
最合适的回答,由SO网友:David Sword 整理而成
在循环中,您将希望获得posts术语。然后,返回输出并将其分组到一个数组中,其中键是类别,而不是回显。然后在分组数组中循环并输出您的类别和相关帖子。类似于:
// to hold and sort your output
$categories = array();
// loop through posts
while( $query->have_posts() ){
// get the posts terms
$terms = wp_get_post_terms(..
$firstTerm = $terms[0];
// see if the first term is defined in our holder
if (!isset($categories[$firstTerm->name])) {
$categories[$firstTerm->name] = array();
}
// ..
$categories[$firstTerm->name][] = display_layout($page,$image);
}
您的
display_layout()
功能将
return
您的html而不是
echo
ing。
然后你会循环通过$categories
对于您的输出:
foreach ($categories as $catName => $catItems) {
echo "<strong>{$catName}</strong>";
foreach ($catItems as $catItem) {
echo $catItem;
}
}
这不是一个复制/粘贴答案,它只是一个在数组中存储和排序值的逻辑想法-请记住,您需要:
使用比“第一项”更好的逻辑,因为第一项不一定是12
或30
(除非你每个帖子只写了一个术语,但这仍然会留下很高的人为错误概率),你会想遍历所有术语,看看它是否包含$cat
值为数组键使用ID而不是字符串,$firstTerm->term_id
而不是$firstTerm->name
, 查找传递名称值的不同方式
将其打包到缓存中,这样每次页面加载都不会进行大量查询