Wordpress教程 2023年03月4日
0 收藏 0 点赞 1,408 浏览 1970 个字

下面是一个详细的WordPress文章筛选应用实例代码,实现了多条件多重字段筛选功能,供参考:

  1. 在主题的functions.php文件中添加以下代码,创建文章筛选表单并处理用户提交的筛选条件:

/**
* 添加文章筛选表单
*/
function custom_filter_form() {
?>
<form action="<?php echo esc_url(home_url('/')); ?>" method="get">
<div class="filter-item">
<label for="author">作者:</label>
<input type="text" name="author" id="author" value="<?php echo isset($_GET['author']) ? esc_attr($_GET['author']) : ''; ?>">
</div>
<div class="filter-item">
<label for="category">分类:</label>
<?php wp_dropdown_categories(array('name' => 'category', 'selected' => isset($_GET['category']) ? $_GET['category'] : '')); ?>
</div>
<div class="filter-item">
<label for="tag">标签:</label>
<?php wp_dropdown_categories(array('taxonomy' => 'post_tag', 'name' => 'tag', 'selected' => isset($_GET['tag']) ? $_GET['tag'] : '')); ?>
</div>
<div class="filter-item">
<label for="year">年份:</label>
<select name="year" id="year">
<option value="">全部</option>
<?php
$years = get_years_with_posts(); // 获取有文章的年份列表
foreach ($years as $year) {
printf('<option value="%s" %s>%s</option>', $year, isset($_GET['year']) && $_GET['year'] == $year ? 'selected' : '', $year);
}
?>
</select>
</div>
<div class="filter-item">
<button type="submit">筛选</button>
</div>
</form>
<?php
}

/**
* 获取有文章的年份列表
*/
function get_years_with_posts() {
global $wpdb;
$years = $wpdb->get_col("SELECT DISTINCT YEAR(post_date) FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date DESC");
return $years;
}

  1. 在主题的archive.php或index.php文件中,在文章循环之前添加以下代码:

<?php
if (isset($_GET['author']) || isset($_GET['category']) || isset($_GET['tag']) || isset($_GET['year'])) {
$args = array(
'post_type' => 'post',
'posts_per_page' => 10,
'paged' => get_query_var('paged') ? get_query_var('paged') : 1,
'author_name' => isset($_GET['author']) ? sanitize_text_field($_GET['author']) : '',
'category_name' => isset($_GET['category']) ? sanitize_text_field($_GET['category']) : '',
'tag' => isset($_GET['tag']) ? sanitize_text_field($_GET['tag']) : '',
'date_query' => array(
array(
'year' => isset($_GET['year']) ? intval($_GET['year']) : ''
)
)
);
$query = new WP_Query($args);
} else {
$query = $wp_query;
}
?>

上述代码通过检查$_GET数组是否存在特定的筛选条件,构建了一个WP_Query对象,用于获取符合条件的。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.mizhanw.com/blog/1807.html

相关推荐
WordPress去除/禁止后台侧栏插件-主题-版本更新提示
今天使用了张戈修改的nginx-help插件修改版,官方版并无自动重启功能,因此不能更新。但是这WordPress后台一直有更新提示,这可真…
日期:2024-12-30 点赞:0 阅读:47
WordPress网站js防扒代码-禁止右键/F12/调试自动关闭窗口
网站防扒老生常谈了,今天老白博客@老白也给大家分享一下从网上看到的“WordPress网站防扒代码/禁止F12调试教程-以7b2主题为例” …
日期:2024-12-30 点赞:0 阅读:61
WordPress优化加速之导航菜单栏缓存Menu Cache
今天老白博客@老白给大家分享又一个WordPress优化加速教程:“导航菜单栏缓存WordPress插件Menu Cache”。我们都知道数…
日期:2024-12-30 点赞:0 阅读:47
2024基于网站性能测试的WordPress优化指南
老白博客WordPress优化高级教程:在如今5G遍地走,千兆多如狗的高速网络时代,如果你访问网站,还出现转圈圈的情况,那么你十有八九是要关…
日期:2024-12-30 点赞:0 阅读:52
WP网站用户行为监测回放插件nicen-replay
在数字营销的世界里,了解用户行为是提升用户体验和转化率的关键。老白推荐一款炫酷的WordPress插件:nicen-replay 。它能够让…
日期:2024-12-30 点赞:0 阅读:50
2024新WordPress缓存插件atec Cache APCu
WordPress插件atec Cache APCu 是一款2024年才投入使用的的高效缓存插件,与其他内存缓存选项(如 Redis 和 M…
日期:2024-12-30 点赞:0 阅读:69
发表评论
暂无评论

还没有评论呢,快来抢沙发~