我正在使用Wordpress插件将一个类别列表和4个帖子添加到网站的主页。
我想要做的是为每个类别添加标题和“更多”链接,但我无法完全理解。
下面是插件代码,我的新部分在底部附近的注释中突出显示。在那一刻,它只显示前两个类别的标题,然后再次重复相同的标题及其链接,即使类别不同。
<?php
global $post;
// default attributes for shortcode
$shortcode_default_attrs = array(
'author' => '',
'show' => 5,
'excerpt' => 'false',
'thumbnail' => 'false',
'post_type' => 'post',
'category' => '',
'tag' => ''
);
// overrides default attributes set above and separates into individual varaibles.
if(!empty($inserted_attrs)) {
extract(shortcode_atts( $shortcode_default_attrs, $inserted_attrs ));
}
if(!empty($author)) {
// checks if there are multiple authors set.
$author_has_comma = strpos($author, ',');
if($author_has_comma === false) {
// gets the author data for a single author.
$author_data = get_user_by( 'login', $author );
if(!empty( $author_data)) {
$post_args = array(
'author' => $author_data->ID,
'posts_per_page' => $show,
'post_type' => $post_type,
'category_name' => $category,
'tag' => $tag,
);
}
} else {
// gets the author data for multiple authors.
$authors = explode(',', $author);
$author_data = '';
foreach($authors as $author_login) {
$author_user = get_user_by('login', $author_login);
$author_data .= $author_user->ID . ',';
}
$post_args = array(
'author' => $author_data,
'posts_per_page' => $show,
'post_type' => $post_type,
'category_name' => $category,
'tag' => $tag,
);
}
} elseif (empty($author)) {
$post_args = array(
'author' => $author,
'posts_per_page' => $show,
'post_type' => $post_type,
'category_name' => $category,
'tag' => $tag,
);
}
// gets posts form database
$post_query = new WP_Query( $post_args );
// displays posts
if($post_query) {
$data = '';
$data .= '<div class="recent_post_by_cc"><ul>';
while ($post_query->have_posts()) : $post_query->the_post();
$data .= '<li>';
// displays a link to the post, using the post title
$data .= '<a href="' . get_permalink() . '" title="' . get_the_title() . '">';
$data .= get_the_title();
$data .= '</a>';
// display a linked featured image if post has
if($thumbnail == 'true') {
$data .= '<div class="cc_left">';
if(has_post_thumbnail()) {
$data .= '<a href="' . get_permalink() . '" title="' . get_the_title() . '">';
$data .= get_the_post_thumbnail(get_the_id(), 'thumbnail');
$data .= '</a>';
}
$data .= '</div>';
}
// displays the post excerpt if "excerpt" has been set to true
if($excerpt == 'true') {
$data .= '<p>' . get_the_excerpt() . '</p>';
}
$data .= '<div style="clear: both;"></div></li>';
endwhile;
// =================================================
// Start of my added section
// =================================================
$data .= '<div class="more-home-link">';
$category = get_the_category();
$data .= '<a href="'.get_category_link($category[0]->cat_ID).'">More</a>';
$data .= '</div>';
$data .= '<div class="home-title">';
$categories = get_the_category();
echo '<h2><a href="'.$cat_link.'">'.$categories[0]->cat_name.'</a></h2>' ;
$data .= '</div>';
// =================================================
// End of my added section
// =================================================
$data .='</div>';
$data .= '</ul>';
}
wp_reset_postdata();
echo $data;
答案 0 :(得分:1)
我认为您为每个类别从此插件中运行了此短代码,并将category_slug
传递给短代码,以便能够获得最后4个帖子,因为来自$post_args
的这一行:{{1} }。
如果是这样,那么你已经有了当前类别slug,你可以使用'category_name' => $category,
获取类别数据然后你可以这样做
get_category_by_slug( $category );
如果你使用这个$curr_cat = get_category_by_slug( $category );
$data .= '<div class="more-home-link">';
$data .= '<a href="'.get_category_link($curr_cat->cat_ID).'">More</a>';
$data .= '</div>';
$data .= '<div class="home-title">';
$data .= '<h2><a href="'.get_category_link($curr_cat->cat_ID).'">'.$curr_cat->cat_name.'</a></h2>' ;
$data .= '</div>';
,并从数组中获取第一个结果,你就无法获得正确的类别,因为一个帖子可以有多个类别,而你只需先选择它们,而不知道它的订单。
因此,您的结果中只显示了两个类别。
此外,更改插件代码并不是一个好习惯,因为这样可以避免以后更新此插件的可能性。因此,更好的方法是使用类别链接创建自己的get_the_category()
或echo
函数,然后在插件的每个短代码后调用它。类似的东西:
return shortcode
答案 1 :(得分:0)
$cat_link
似乎未初始化
也:
$category[0]->cat_name
仅显示第一个元素的名称([0])。这些帖子有多个类别吗?
可能你需要这样的东西:
foreach (get_categories() as $category) {
echo '<div>..... {$category->cat_name} ....</div>';
}