如何跳过 Wordpress 中相邻帖子上的某些链接?

Posted

技术标签:

【中文标题】如何跳过 Wordpress 中相邻帖子上的某些链接?【英文标题】:How to skip certain links on adjacent posts in Wordpress? 【发布时间】:2013-05-05 21:31:45 【问题描述】:

我使用以下代码分别从单个帖子模板中获取上一个帖子和下一个帖子的链接;

<?php echo get_permalink(get_adjacent_post(false,'',false)); ?>

<?php echo get_permalink(get_adjacent_post(false,'',true)); ?>

我的问题是,如果有某些帖子我想跳过这些代码,然后直接转到后面的帖子,我可以使用自定义字段以某种方式做到这一点,否则我怎样才能让 Wordpress 跳过某个链接出现时并获取下一个相邻的链接,而无需先转到我想跳过然后重定向的链接或其他链接,而是立即回显正确的链接..?

非常感谢!

亚历克斯

【问题讨论】:

谢谢!第一个选项就好了!! 【参考方案1】:

您可以通过不同的方式来解决这个问题。最简单的解决方案可能是使用“排除类别”(第二个参数),例如从术语 ID 为 5 的类别中排除帖子:

get_adjacent_post( false, '5', false )

另一种选择是使用get_previous_post_whereget_next_post_where 过滤器来修改SQL 查询。

您可以在选项表中存储要排除的帖子 ID 数组,这是一个如何排除所有粘性帖子的示例:

add_filter( 'get_previous_post_where', 'so16495117_mod_adjacent' );
add_filter( 'get_next_post_where', 'so16495117_mod_adjacent' );
function so16495117_mod_adjacent( $where ) 
    return $where . ' AND p.ID NOT IN (' . implode( ',', get_option( 'sticky_posts' ) ) . ' )';

或者,正如您在 Q 中建议的那样,您可以过滤掉具有特定帖子元键的帖子,例如my_field:

add_filter( 'get_previous_post_where', 'so16495117_mod_adjacent_bis' );
add_filter( 'get_next_post_where', 'so16495117_mod_adjacent_bis' );
function so16495117_mod_adjacent_bis( $where ) 
    global $wpdb;
    return $where . " AND p.ID NOT IN ( SELECT post_id FROM $wpdb->postmeta WHERE ($wpdb->postmeta.post_id = p.ID ) AND $wpdb->postmeta.meta_key = 'my_field' )";

【讨论】:

以上是关于如何跳过 Wordpress 中相邻帖子上的某些链接?的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress:术语链接跳过存档页面并直接转到最新帖子

PHP 在Wordpress中按字母顺序排列的相邻帖子

填充不包括某些帖子类别的自定义 WordPress 帖子存档

停止显示自定义帖子类型的 wordpress 搜索

如何在没有 single.php 的情况下从 wordpress 帖子中删除特色图片

如何查询我的 WordPress 博客以列出我的 Vue.js 网站上的最新帖子?