要在类别中发布的上一个/下一个链接,而不是标签?

时间:2012-09-12 作者:Stephen

在一个帖子页面上,我的循环后有以下代码:

<?php previous_post_link(\'&laquo; %link\') ?> &#124; 
<?php next_post_link(\' %link &raquo;\') ?>
出于某种原因,它不是在检索类别中的下一个项目,而是在该标记分组中查找下一个项目。类别为“rentals”(例如),标记为“Neighbory x”(例如)。但是链接是有限的,只显示“邻居x”(标签),而不显示“租赁”(类别)。

有没有办法让导航链接使用类别中的所有内容而不是标记?

1 个回复
SO网友:kaiser

默认值

首先,您不必\'&laquo; %link\' 在中,因为这已经是默认值。

WPDB查询您的“问题”是,底层功能adjacent_post_link() 使用get_adjacent_post() 如果不是查询附件。

然后构建以下内容JOIN 查询部分:

INNER JOIN $wpdb->term_relationships 
    AS tr 
    ON p.ID = tr.object_id 
INNER JOIN $wpdb->term_taxonomy tt 
    ON tr.term_taxonomy_id = tt.term_taxonomy_id
执行查询前过滤查询:

以下是核心函数中的过滤器描述:

apply_filters( "get_{$adjacent}_post_join", $join, $in_same_cat, $excluded_categories )
这意味着,您可以构建以下插件-IF 您设置了$in_same_cat 参数到TRUE (提示:这是next_/previous_post_link()).

<?php
! defined( \'ABSPATH\' ) AND exit;
/** Plugin Name: Intercept Next/Prev Posts links query <code>JOIN</code>. */

# Alter »PREVIOUS« query
function wpse64909_prev_link_query( $join, $in_same_cat, $excluded_cats )
{
    global $post;

    // Example: Only for specific post types.
    // $post_type = $post->post_type
    // if ( ! in_array( $post_type, array( \'post\', \'page\' ) )
    //     return;

    // alter $join - you have $in_same_cat and $excluded_cats to assist you

    return $join;
}
add_filter( \'get_previous_post_join\', \'wpse64909_nextprev_link_query\', 10, 3 );

# Alter »NEXT« query
function wpse64909_next_link_query( $join, $in_same_cat, $excluded_cats )
{
    global $post;

    // alter $join - you have $in_same_cat and $excluded_cats to assist you

    return $join;
}
add_filter( \'get_next_post_join\', \'wpse64909_nextprev_link_query\', 10, 3 );

结束

相关推荐

将筛选器添加到wp_Dropdown_Pages()或wp_Dropdown_Categories()-没有选择容器?

我在和wp_dropdown_pages() 和wp_dropdown_categories() 并且两者都始终输出<select>-盒子及其<option>s作为项目。有没有可能在这个函数中添加一个过滤器/挂钩,这样我就可以得到<option>s而不被包裹在<select>我这样问的原因是我想将页面和类别合并到一个下拉列表中。我找不到参数来设置这个!有什么想法吗?