下一步和上一步。仅在类别内发布链接

时间:2015-02-20 作者:dmtnexer

Im使用WP的下一篇文章链接功能显示“同一类别下一篇文章”的下一篇和上一篇导航链接,所有这些都很好。。。我遇到的问题是,当我在某个类别的“最后一篇”帖子中时,无论如何都会出现“下一篇”链接,并做我不想做的事情:链接到另一个类别的第一篇帖子。与类别的第一篇文章相同,当浏览类别的第一篇文章时,“上一篇”链接会显示为链接到另一个不同类别的前一篇文章。。。我希望在第一篇和最后一篇文章中,这个链接不会显示。

<div id="nav-above" class="navigation">
                    <div class="nav-previous"><?php previous_post_linknext_post_link( \'%link\', \'<span class="meta-nav">\' .     
    _x( \'&#9668; Previous\', \'Previous post link\',\'category\' ,TRUE ) . \'</span>\' ); ?></div>
                    <div class="nav-next"><?php next_post_link( \'%link\', \'<span class="meta-nav">\' . _x( \'Next &#9658; \', \'Next post link\', \'category\',TRUE ) . \'</span>\' ); ?> </div>
                </div><!-- #nav-above -->

http://codex.wordpress.org/Function_Reference/next_post_link

3 个回复
最合适的回答,由SO网友:David Gard 整理而成

您可以使用previous_post_link()next_post_link().

这些函数将为您创建链接,您应该能够摆脱分页所使用的所有逻辑。

由于您只希望链接到同一类别的帖子,因此应使用具有以下参数的函数:

previous_post_link(\'&laquo; %link\', \'%title\', true);
next_post_link(\'%link &raquo;\', \'%title\', true);
更新关于上一次/下一次链接的最新问题,当它们是第一次/最后一次发布时,请参见这一行previous_post_link()next_post_link() 关于$in_same_term 参数:

指示下一篇文章是否必须与当前文章在相同的分类术语内。如果设置为“true”,则仅显示当前分类术语中的帖子。如果帖子同时位于父类和子类中,或多个术语中,则下一个帖子链接将指向这些术语中的下一个帖子。

考虑到这一点,我怀疑你的前几篇文章可能与不止一个类别有关?如果是这样的话wp_get_object_terms 过滤器可能会有所帮助。

在您最初的问题(预编辑)中,您只搜索第一个类别中的帖子,因此我将在此处应用该逻辑:

<?php add_filter(\'wp_get_object_terms\', \'my_custom_post_navigation\', 4, 99); ?>
<div id="nav-above" class="navigation">
    <div class="nav-previous">
        <?php previous_post_link( \'<span class="meta-nav"> %link </span>\', _x( \'&#9668; Previous\', \'Previous post link\', \'category\') , TRUE ); ?>
    </div>
    <div class="nav-previous">
        <?php next_post_link( \'<span class="meta-nav"> %link </span>\', _x( \'Next &#9658;\', \'Next post link\', \'category\') , TRUE ); ?>
    </div>
</div><!-- #nav-above -->
<?php remove_filter(\'wp_get_object_terms\', \'my_custom_post_navigation\', 99); ?>
除上述内容外,您还应将其放置在functions.php 文件:

/**
 * Return only the first category when outputting the previous/next post links
 */
function my_custom_post_navigation($terms, $object_ids, $taxonomies, $args){
    
    return array_slice($terms, 0, 1);
    
}

SO网友:Muhammad Usama

如果你需要限制上一篇或下一篇文章的链接custom taxonomyterm, custom post type, custom fieldformat 那你应该试试Ambrosite Next/Previous Post Link Plus. 此插件创建两个新的模板标记-next_post_link_plusprevious_post_link_plus — 哪些是核心WordPress的升级版本next_post_linkprevious_post_link 模板标记。

对post\\u日期以外的列上的下一个/上一个post链接进行排序(例如,按字母顺序)

  • 可以使用Post类型Order和其他流行的Post重新排序插件
  • SO网友:Surender

    复制单曲。php页面,并将其粘贴到子主题的目录中。打开单曲。从子主题目录中删除php,并在文件末尾添加以下代码[在get\\u footer()之前;]

    <?php
    $post_id = $post->ID; // Get current post ID
    $cat = get_the_category(); 
    $current_cat_id = $cat[0]->cat_ID; // Get current Category ID 
    
    $args = array(\'category\'=>$current_cat_id,\'orderby\'=>\'post_date\',\'order\'=> \'DESC\');
    $posts = get_posts($args);
    // Get IDs of posts retrieved by get_posts function
    $ids = array();
    foreach ($posts as $thepost) {
        $ids[] = $thepost->ID;
    }
    // Get and Echo the Previous and Next post link within same Category
    $index = array_search($post->ID, $ids);
    $prev_post = $ids[$index+1];
    $next_post = $ids[$index-1];
    ?>
    
    <?php if (!empty($prev_post)){ ?> <a class="previous-post" rel="prev" href="<?php echo get_permalink($prev_post) ?>"> <span class="meta-icon"><i class="fa fa-angle-left fa-lg"></i></span> Previous</a> <?php } ?>
    
    <?php if (!empty($next_post)){ ?> <a class="next-post" rel="next" href="<?php echo get_permalink($next_post) ?>">Next <span class="meta-icon"><i class="fa fa-angle-right fa-lg"></i></span> </a> <?php } ?>
    
    添加此代码后,将以下代码粘贴到子主题的样式中。css设置链接样式:

    a.previous-post, a.next-post {
        color: #fff;
        background-color: #4498e7;
        text-align: center;
        height: 34px;
        line-height: 34px;
        font-size: 14px;
        border: 1px solid;
        padding: 0 20px;
        margin-bottom: 30px;
        text-transform: uppercase;
        border-radius: 4px;
        font-weight: bold;
    }
    
    a.previous-post:hover, a.next-post:hover {
        color: #4498e7;
        background-color: #fff;
    }
    
    a.previous-post {
        float: left !important;
    }
    
    a.next-post {
        float: right !important;
    }
    
    让我知道结果:)

    结束

    相关推荐