WordPress使用钩子(Hooks)来在某个特定的时间点执行自定义代码。其中之一是get_{$adjacent}_post_where钩子,它在获取相邻文章(Post)时使用。
get_{$adjacent}_post_where钩子有两个参数:$where和$in_same_term。
1. $where参数:一个字符串,用于指定在获取相邻文章时使用的SQL查询条件。通过修改$where参数,可以定制获取相邻文章的条件。
2. $in_same_term参数:一个布尔值,表示是否需要在同一个分类中获取相邻文章。如果$in_same_term为true,则只获取与当前文章属于同一分类的相邻文章。
下面是get_{$adjacent}_post_where钩子的一个实际用例:
function custom_get_adjacent_post_where($where, $in_same_term) {
global $wpdb, $post;
// 仅获取发布状态的相邻文章
$where .= " AND p.post_status = 'publish'";
// 仅在同一分类中获取相邻文章
if ($in_same_term) {
$terms = wp_get_post_terms($post->ID, 'category');
if (!empty($terms)) {
$term_ids = array();
foreach ($terms as $term) {
$term_ids[] = $term->term_id;
}
$term_ids_str = implode(',', $term_ids);
$where .= " AND tt.term_id IN ($term_ids_str)";
}
}
return $where;
}
add_filter('get_previous_post_where', 'custom_get_adjacent_post_where', 10, 2);
add_filter('get_next_post_where', 'custom_get_adjacent_post_where', 10, 2);
在上述代码中,我们定义了一个名为custom_get_adjacent_post_where的函数,它将$where和$in_same_term作为参数。我们首先通过全局变量$wpdb和$post获取当前文章的信息。
然后,我们将只获取发布状态的相邻文章的条件添加到$where参数中。这样可以确保我们只获取已发布的文章。
接下来,如果$in_same_term为true,则我们使用wp_get_post_terms函数获取当前文章的分类,并将分类的ID添加到$where参数中,以便只获取与当前文章属于同一分类的相邻文章。
最后,我们使用add_filter函数将custom_get_adjacent_post_where函数添加为get_previous_post_where和get_next_post_where钩子的过滤器。这样,每次获取相邻文章时,都会调用custom_get_adjacent_post_where函数。
通过使用get_{$adjacent}_post_where钩子,并根据自己的需求定制$where参数,我们可以灵活地获取相邻文章。
0 个评论