Wordpress教程 2023年03月4日
0 收藏 0 点赞 1,324 浏览 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 自动更新所有文章的发布日期为当天的日期
//二开自动更新文章日期为当天发布。 //设置宝塔面板中的定时任务,通过访问带有?update_posts=run的链接触发文章更新.如:c…
日期:2024-09-22 点赞:0 阅读:43
WooCommerce订单列表显示购买产品
// 为 Legacy CPT-based 订单添加自定义列 add_filter('manage_edit-shop_order_colu…
日期:2024-09-20 点赞:0 阅读:90
WooCommerce Order 类的所有Get方法,以面向对象的方法获取订单数据
在开发WooCommerce插件或者与第三方系统交互时,我们需要获取 WooCommerce 订单的数据,WooCommerce的 WC_O…
日期:2024-09-20 点赞:0 阅读:53
为WooCommerce后台订单列表添加按自定义字段功能
  // 添加自定义列到订单列表 add_filter('manage_woocommerce_page_wc-orders_co…
日期:2024-09-20 点赞:0 阅读:55
添加删除 WooCommerce 数据列表中的数据列
转载:添加删除 WooCommerce 数据列表中的数据列 _WordPress智库 (wpzhiku.com) 在 WooCommerce…
日期:2024-09-20 点赞:0 阅读:66
WooCommerce的结账页面的订单摘要中,在商品数量后添加加减按钮
关于 WooCommerce 结账页面的定制内容在网上有大量讨论。为什么呢?因为结账页面无疑是任何 WooCommerce 网站的关键页面!…
日期:2024-08-11 点赞:0 阅读:121
发表评论
暂无评论

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