修改指向当前作者和其他帖子的上一篇和下一篇文章的链接

时间:2015-09-09 作者:Shahrukh Khan

我已创建自定义帖子类型gallery.

如何更改previous postnext post 链接到仅指向当前作者的帖子?

如果没有更多帖子,则不应显示上一篇和下一篇帖子链接

enter image description here

2 个回复
最合适的回答,由SO网友:Shahrukh Khan 整理而成

要将帖子导航限制为同一作者和类别,请找到链接模板。/wp includes/folder中的php文件,并使用您最喜欢的文本编辑器(Notepad++for me)进行编辑。在此文件中,您将更改四个函数。在链接模板中找到以下行。php文件:

function previous_post_link($format=\'« %link\', $link=\'%title\', $in_same_cat = false, $excluded_categories = \'\') {
    adjacent_post_link($format, $link, $in_same_cat, $excluded_categories, true);
}
将其更改为以下内容:

function previous_post_link($format=\'« %link\', $link=\'%title\', $in_same_cat = false, $excluded_categories = \'\', $is_author = false) {
    adjacent_post_link($format, $link, $in_same_cat, $excluded_categories, true, $is_author);
}
在前面的代码行下面,您应该可以找到以下内容:

function next_post_link($format=\'%link »\', $link=\'%title\', $in_same_cat = false, $excluded_categories = \'\') {
    adjacent_post_link($format, $link, $in_same_cat, $excluded_categories, false);
}
将其更改为以下内容:

function next_post_link($format=\'%link »\', $link=\'%title\', $in_same_cat = false, $excluded_categories = \'\',$is_author = false) {
    adjacent_post_link($format, $link, $in_same_cat, $excluded_categories, false, $is_author);
}
这些变化很小。您应该注意到,所做的唯一更改是将$is\\u author=false添加到函数参数中,并将$is\\u author添加到对相邻的\\u post\\u链接调用的调用中。

在下一个函数中,您将添加另一个参数,并调整下一篇/上一篇文章中的选择查询。找到以下类似以下内容的行:

function get_adjacent_post($in_same_cat = false, $excluded_categories = \'\', $previous = true) {
    ...
    }
这个区块相当长,所以我只讨论正在更改的内容。在此行中添加与之前相同的参数($is\\u author=false):

function get_adjacent_post($in_same_cat = false, $excluded_categories = \'\', $previous = true, $is_author = false) {
    ...
    }
接下来,在同一个函数中找到$where变量,如下所示(函数中大约有50行)。

$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 );
我们接下来要做的是修改这个变量,使其仅在$is\\u author为true时保留author。要进行此测试,请使用$is\\u author的布尔值,并在$where变量的末尾添加一点额外的标记。

$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 );
    if($is_author)
        $where .= " AND p.post_author=\'".$post->post_author."\'";
链接模板中的最终更改。php文件定位以下函数:

function adjacent_post_link($format, $link, $in_same_cat = false, $excluded_categories = \'\', $previous = true) {
    if ( $previous && is_attachment() )
        $post = & get_post($GLOBALS[\'post\']->post_parent);
    else
        $post = get_adjacent_post($in_same_cat, $excluded_categories, $previous);
由$is\\u author在相邻的\\u post\\u链接函数中更改此函数,并将其添加到get\\u相邻的\\u post调用中:

function adjacent_post_link($format, $link, $in_same_cat = false, $excluded_categories = \'\', $previous = true, $is_author = false) {
    if ( $previous && is_attachment() )
        $post = & get_post($GLOBALS[\'post\']->post_parent);
    else
        $post = get_adjacent_post($in_same_cat, $excluded_categories, $previous, $is_author);
现在,您可以在主题文件中使用这个新选项了。要“激活”保留作者功能,请在单曲中使用类似的内容。php:

<?php previous_post_link( \'%link\', \'\' . _x( \'&larr;\', \'Previous post link\', \'twentyten\' ) . \' %title\',\'true\',\'\',\'true\' ); ?>
<?php next_post_link( \'%link\', \'%title \' . _x( \'&rarr;\', \'Next post link\', \'twentyten\' ) . \'\',\'true\',\'\',\'true\' ); ?>
将最后一个值设置为“true”将激活该链接的“保留作者”功能。这将确保链接位于同一作者以及同一日期内。

SO网友:Cin

这个correct 由于Wordpress 4.4,执行此操作的方法如下:

add_filter( "get_next_post_where", function($where, $in_same_term, $excluded_terms, $taxonomy, $post){
  $where .= " AND p.post_author=\'".$post->post_author."\'";
  return $where;
}, 10, 5);

add_filter( "get_previous_post_where", function($where, $in_same_term, $excluded_terms, $taxonomy, $post){
  $where .= " AND p.post_author=\'".$post->post_author."\'";
  return $where;
}, 10, 5);
Note: 请不要遵循levidia1221的公认回答,因为它涉及修改Wordpress核心,这是一个糟糕的想法。修改核心意味着您无法更新Wordpress而不丢失更改,这是一个巨大的安全风险。如果要修改的函数中没有挂钩,最好复制所需的函数并在主题或插件中进行更改,而不是直接修改核心文件。

相关推荐

是否可以取消对特定帖子类型的POSTS_PER_PAGE限制?

我想知道我是否可以取消特定帖子类型的posts\\u per\\u页面限制。在存档中。php页面我显示不同的帖子类型,对于特定的“出版物”帖子类型,我想显示所有帖子。我如何在不影响传统“post”类型的情况下实现这一点?