好久没写wordPress的技术文章了,为了灵活高效调用文章列表,今天搞了一段代码分享给大家。
wordPress的简码简码(Shortcode)是个高效的编辑工具,能够快速添加自定义内容。
简码的设计思路
简码的目的是为了提供一种灵活展示文章列表的方式,包括但不限于以下几点:
- 支持多种文章类型:不仅仅是标准的文章,还可以是页面或自定义文章类型。
- 自定义显示数量:用户可以指定显示的文章数量。
- 多样化展示样式:例如仅显示标题、标题加图片、标题加日期等。
- 分类筛选:根据文章的分类来过滤显示的文章。
- 自定义字段筛选:根据文章是否含有特定的自定义字段来进一步筛选文章。
简码的实现
简码的实现主要通过add_shortcode
函数,在WordPress中注册了一个新的简码posts_list
。通过传入的参数,这个简码能够灵活地根据用户需求查询和展示文章列表。
以下是简码实现的核心部分:
function custom_posts_list_shortcode($atts) {
// 获取短代码属性,并设置默认值
$atts = shortcode_atts(
array(
'type' => 'post', // 默认文章类型为'post'
'count' => 5, // 默认显示5篇文章
'style' => 'title', // 默认样式仅显示标题
'category' => '', // 文章分类,默认为空,表示不根据分类筛选
'meta_key' => '', // 自定义字段键名,默认为空,表示不根据自定义字段筛选
),
$atts,
'posts_list'
);
// 构建查询参数
$query_args = array(
'post_type' => $atts['type'],
'posts_per_page' => $atts['count'],
);
// 如果指定了分类,则添加到查询参数中
if (!empty($atts['category'])) {
$query_args['category_name'] = $atts['category'];
}
// 如果指定了自定义字段,则添加到查询参数中
if (!empty($atts['meta_key'])) {
$query_args['meta_key'] = $atts['meta_key'];
$query_args['meta_value'] = array(''); // 这里假设你只是想检查键存在,而不关心键的值
$query_args['meta_compare'] = '!=';
}
$the_query = new WP_Query($query_args);
// 开始生成列表
$output = '<ul class="custom-posts-list">';
if ($the_query->have_posts()):
while ($the_query->have_posts()): $the_query->the_post();
// 根据样式选择显示方式
switch ($atts['style']) {
case 'image_title':
// 显示图片和标题
$output .= '<li><img src="' . get_the_post_thumbnail_url(get_the_ID(), 'thumbnail') . '" alt="' . get_the_title() . '">';
$output .= '<a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
break;
case 'title_date':
// 显示标题和日期
$output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a> ';
$output .= '<span>' . get_the_date() . '</span></li>';
break;
default:
// 默认仅显示标题
$output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
break;
}
endwhile;
endif;
wp_reset_postdata();
$output .= '</ul>';
return $output;
}
add_shortcode('posts_list', 'custom_posts_list_shortcode');
使用方法:
[posts_list type=”post” count=”5″ style=”image_title” category=”news” meta_key=”featured”]
参数应该大概能看出来意思吧,只渡有缘人。
留下您的宝贵意见