Wordpress教程 2023年03月4日
0 收藏 0 点赞 839 浏览 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

相关推荐
宝塔面板里mysql经常自动停止怎么办?
宝塔面板里mysql经常自动停止怎么办? 随着服务器里面的项目越来越多,会发现宝塔面板里mysql经常自动停止。通常这个是因为服务器内存不足…
日期:2023-08-06 点赞:0 阅读:49
更换WordPress网站的域名原始图片地址保持不变
将以上代码添加到你的主题的functions.php文件中,并将$old_domain和$new_domain的值替换为你的旧域名和新域名。…
日期:2023-07-18 点赞:0 阅读:1,005
PHP抓取新浪博客文章内容代码
<?php /** * 新浪博客文章内容解析 */ header("content-type:application/json; ch…
日期:2023-07-14 点赞:0 阅读:717
wp_list_bookmarks()函数删除li标签示例代码【友情链接】
可以使用wp_list_bookmarks()函数的before和after参数。这是更新后的代码: <?php $args = ar…
日期:2023-06-26 点赞:0 阅读:957
WordPress主题分类列表中显示当前分类下的置顶文章,并在下面显示最新发布的文章
在这个代码中,我们首先获取当前分类的ID ($cat_id) 和所有置顶文章的ID数组 ($sticky_posts)。 然后,我们使用 W…
日期:2023-06-25 点赞:0 阅读:320
自动为文章添加相关关键词标签
我们使用的是在当前主题 functions.php 文件中添加代码 <?php function wp_aatags_html2tex…
日期:2023-06-24 点赞:0 阅读:576
发表评论
暂无评论

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