自定义菜单结构的NEXT_POST_LINK()

时间:2012-02-11 作者:Pekka

在博客中,我使用next_post_link()prev_post_link() 广泛发布。

我在WP3菜单中也显示了许多页面。它们按主题和子主题进行组织,例如:

Home
About
- Subpage 1
- Subpage 2 
- Subpage 3 
Contact
我想在这些页面上设置“上一页”和“下一页”导航,这样当我在“关于”的子页面2上时,我可以使用“下一页”和“上一页”箭头导航到子页面1和3。

的默认行为next_post_link()/prev_post_link() 不适用于此:它根据所有页面的列表计算下一个和上一个项目。

有没有简单的方法next_post_link()prev_post_link() 对我的菜单结构敏感,还是我必须自己构建?

1 个回复
最合适的回答,由SO网友:kaiser 整理而成

函数背后的函数背后的函数&hellip

next_post_link(); 是的包装器adjacent_post_link(); 然后调用get_adjacent_post(); 其中,3rd参数为$previous 并设置为true/false 获取上一篇或下一篇文章。

这给了您两个机会:使用输出或查询过滤器。

输出过滤器这听起来可能更简单,但您必须对此进行额外的查询。

// The core:
$adjacent = $previous ? \'previous\' : \'next\';
echo apply_filters( "{$adjacent}_post_link", $format, $link );

// Add your callbacks like this:
add_filter( \'previous_post_link\', \'your_callback_fn\', 20, 2 );
add_filter( \'next_post_link\', \'your_callback_fn\', 20, 2 );
这是我建议您的:检查是否有$post->post_parent 设置并修改查询,以获取具有下一个更高id且具有相同父级的帖子。

// The core:
$adjacent = $previous ? \'previous\' : \'next\';
$join  = apply_filters( "get_{$adjacent}_post_join", $join, $in_same_cat, $excluded_categories );
$where = apply_filters( "get_{$adjacent}_post_where", $wpdb->prepare("WHERE p.post_date $op %s AND p.post_type = %s AND p.post_status = \'publish\' $posts_in_ex_cats_sql", $current_post_date, $post->post_type), $in_same_cat, $excluded_categories );
$sort  = apply_filters( "get_{$adjacent}_post_sort", "ORDER BY p.post_date $order LIMIT 1" );

结束

相关推荐

Menu API not switching menus?

我正在使用菜单API,我想切换到其他菜单,但出于某种原因,它保留了第一个菜单这是我的密码在函数中。php add_action( \'init\', \'register_my_menus\',10 ); function register_my_menus() { register_nav_menu(\'main-navigation\', \'Main Navigation\'); } 下面是我的主题文件(header.ph