How to display a category list in a mediawiki like way? 还有一句话,我个人几乎总是选择延长Walker_Category
类方法,但对于所需更改非常小的情况。这当然有点个人偏好,但也有一定的背景,特别是因为可重用性、可扩展性,而且——即使看起来没有必要——毕竟它经常——甚至大多数时候——是实现自定义输出的更简单方法
<小时>Thumbnail from post in child category:
这样,您可以从属于其中一个子类别的随机帖子中检索“类别缩略图”
我已经对代码进行了注释,以使您能够理解这是如何完成的,此外,它应该是非常不言自明的。
/**
* wpse135208_cat_thumb_from_random_child.
*
* Get the thumbnail from a random post belonging to one of the child categories.
*
* @version 0.1
*
* @link https://wordpress.stackexchange.com/q/135208/22534
*
* @param integer $c_cat (default: \'\')
* @param string/array $size (default: \'post-thumbnail\')
* @param string/array $attr (default: null)
*
* @return string
*/
function wpse135208_cat_thumb_from_random_child( $c_cat = \'\', $size = \'post-thumbnail\', $attr = null ) {
// do nothing if $c_cat is empty
if( empty($c_cat) ) return;
// get_terms is used because we only need ids
$taxonomies = array(
\'category\'
);
$args = array(
\'child_of\' => $c_cat,
\'fields\' => \'ids\'
);
// returns an array of ids
$child_cats = get_terms( $taxonomies, $args );
// use this for debugging
//echo \'<pre>\'; print_r($child_cats); echo \'</pre>\';
$args = array(
// we use numberposts instead of post_per_page,
// because if the pre_get_posts filter is used,
// it can make a difference in this case
// we only want one post
\'numberposts\' => 1,
// but we randomize this
\'orderby\' => \'rand\',
\'category__in\' => $child_cats,
\'fields\' => \'ids\',
// make sure only posts with featured image are considered
\'meta_query\' => array(
array(
\'key\' => \'_thumbnail_id\',
\'compare\' => \'EXISTS\'
)
)
);
// returns an array containing one post id
$ct_p_id = get_posts( $args );
// use this for debugging
//echo \'<pre>\'; print_r($ct_p_id); echo \'</pre>\';
// use this for debugging
//echo \'<pre>\'; print_r( ( 1 /*change to 0 to show src info*/ ) ? get_the_post_thumbnail( $ct_p_id[0], $size, $attr ) : wp_get_attachment_image_src( get_post_thumbnail_id( $ct_p_id[0] ) ) ); echo \'</pre>\';
// now we can use this to return our thumbnail
return get_the_post_thumbnail( $ct_p_id[0], $size, $attr );
}
用法如下:echo wpse135208_cat_thumb_from_random_child( \'1\', \'thumbnail\', null );
在代码中使用它,如下所示:$categories = get_categories($args);
foreach($categories as $category) {
echo wpse135208_cat_thumb_from_random_child($category->cat_ID);
}
<小时>Category thumbnail via plugin:
这样做的好处是具有实际的类别缩略图
我给了插件-Category Thumbnails - 我在上面的评论中提到了一个快速测试。一般来说,这是可行的,我觉得这是一个比你在回答中提出的更好的解决方案,因为它可以让你通过wordpress媒体库管理缩略图。
我发现了一个小错误,插件作者是notified 并立即回复,因此该错误将很快得到修复。如果你等不及了,你可以像这样自己修复它:
然而,功能
the_category_thumbnail();
不产生输出。在版本1.0.3的源代码中如下所示:function the_category_thumbnail($category_id = null, $sizes = array()) {
print get_the_category_thumbnail($cat, $sizes);
}
我成功地解决了以下问题:function the_category_thumbnail($category_id = null, $sizes = array()) {
print get_the_category_thumbnail($category_id, $sizes);
}
因此,通过使参数/参数名称相等。或者你只是使用get_the_category_thumbnail()
相反,你只需要echo
信息技术:
echo get_the_category_thumbnail(\'1\');
另一个小小的失望是,它提供的插件和函数无法让您处理生成的图像大小。这不太好,因为我们想要的是正确的尺寸,而不是全尺寸。我也会通知作者,这样他可以进一步改进他的插件。同时,幸运的是,可以通过构造自定义函数轻松解决这一问题:/**
* wpse135208_cat_thumb_wrapper.
*
* Wrapper function to have the ability to use predefined image sizes via wp_get_attachment_image().
*
* @version 0.1
*
* @link https://wordpress.stackexchange.com/q/135208/22534
*
* @param integer $category_id (default: null)
* @param string/array $size (default: \'thumbnail\')
* @param boolean $icon (default: false)
* @param string/array (default: null)
*
* @return string
*/
function wpse135208_cat_thumb_wrapper( $category_id = null, $size = \'thumbnail\', $icon = false, $attr = null ) {
$category_thumbnail_obj = get_the_category_data( $category_id );
return wp_get_attachment_image( $category_thumbnail_obj->id, $size, $icon, $attr );
}
用法如下:echo wpse135208_cat_thumb_wrapper( \'1\', \'thumbnail\', false, null );
这应该可以帮助您实现这一目标。正如我所说,这是最好的,因为您可以通过媒体库管理类别缩略图。在代码中使用它,如下所示:$categories = get_categories($args);
foreach($categories as $category) {
echo wpse135208_cat_thumb_wrapper($category->cat_ID);
}