分页帖子-如何使用数字和下一个/上一个链接?


17

我希望wp_link_pages(多页帖子)显示页码,在这些数字之前显示单词“ previous”,在这些数字之后显示“ next”。它看起来像这样:

上一页1、2、3、4下一页

我正尝试在没有插件的情况下执行此操作。到目前为止,这是我尝试过的方法,但是它不起作用,仅显示数字。

<?php wp_link_pages(array(
    'before' => '<span style="clear:both; display:block">Pages', 
    'after'  => '</span>',
    'next_or_number'=>'number',
    'previouspagelink' => 'previous',
    'nextpagelink'=> 'Next'
)); ?>

Answers:


12

默认情况下,您使用的功能wp_link_pagesCodex不具有您要查找的功能。

但是,您可以使用回调函数轻松地对其进行扩展,该函数在该函数参数上注册为过滤器

add_filter('wp_link_pages_args', 'wp_link_pages_args_prevnext_add');

然后,过滤器将即时修改在该函数中使用的参数,并将缺少的链接注入到prevnext参数,这些链接在输出的左侧和右侧输出。编号的链接列表next_or_number' => 'number'):

/**
 * Add prev and next links to a numbered page link list
 */
function wp_link_pages_args_prevnext_add($args)
{
    global $page, $numpages, $more, $pagenow;

    if (!$args['next_or_number'] == 'next_and_number') 
        return $args; # exit early

    $args['next_or_number'] = 'number'; # keep numbering for the main part
    if (!$more)
        return $args; # exit early

    if($page-1) # there is a previous page
        $args['before'] .= _wp_link_page($page-1)
            . $args['link_before']. $args['previouspagelink'] . $args['link_after'] . '</a>'
        ;

    if ($page<$numpages) # there is a next page
        $args['after'] = _wp_link_page($page+1)
            . $args['link_before'] . ' ' . $args['nextpagelink'] . $args['link_after'] . '</a>'
            . $args['after']
        ;

    return $args;
}

用法:

wp_link_pages(array(
    'before' => '<p>' . __('Pages:'),
    'after' => '</p>',
    'next_or_number' => 'next_and_number', # activate parameter overloading
    'nextpagelink' => __('Next'),
    'previouspagelink' => __('Previous'),
    'pagelink' => '%',
    'echo' => 1 )
);

如果你的主题 始终使用上一个和下一个链接,则可以在每次number使用该功能(默认值)时对其进行一些更改,使其成为默认行为,因此您需要在主题中编写的内容更少。

Velvet Blues建议的,此实现略有不同。


除了一些评论和早期回报之外,实现,选项名称和解释与我的完全相同。我在俯视什么吗?您的解决方案有什么好处?谢谢。
天鹅绒蓝调

也许当我比较代码时。
hakre 2011年

只要问题在这里,Hakre的解决方案就可以使用。在StackExchange上,始终首选完整的答案(=无需依赖外部资源即可理解)。
fuxia

6

wp_link_pages()功能只显示无论是文字或数字,不可能兼顾。如果您看一下该函数的代码,就会发现没有选项可以通过传递参数来使其行为有所不同。

话虽这么说,但没有插件可以通过三种方式进行:

  1. 在主题的functions.php文件中创建自己的函数。可以,但是您将拥有一个新功能。
  2. 使用2-3个实例wp_link_pages()非常低效的hack。
  3. 使用过滤器。首选方法。见下文。

我在我的博客上写了一篇有关如何执行此操作的文章。基本上,我使用wp_link_pages_args过滤器,并在functions.php文件中添加了一个函数,该函数添加了一个新选项'next_and_number'。

WordPress Hack:使用wp_link_pages()显示编号和下一个/上一个链接


很棒的人...我当时正在考虑使用4个全局值,但从未真正找到解决方案... +1!
Rutwick Gangurde 2011年

3

试试看,您可以对其进行更多自定义。但是它应该按照您想要的方式进行:-)

function tp_link_pages() {
    global $page, $numpages;

    echo paginate_links( array(
        'format' => get_permalink() . '%#%/',
        'current' => $page,
        'total' => $numpages
    ) );
}

我们该如何管理?wordpress.org/support/topic/… 或如何在页码前添加动态自定义标题。
拉维·帕特

1

我没什么问题...您有任何错误吗?

这应该工作:

<?php $args = array(
    'before'           => '<span style="clear:both; display:block">Pages',
    'after'            => '</span>',
    'nextpagelink'     => __('Next'),
    'previouspagelink' => __('Previous')
); 

wp_link_pages($args);
?> 

您不需要添加next_or_number,因为number已经是默认值。


由于某种原因,这不起作用,但对我来说似乎正确。我想知道是否对3.3进行了更改,或者是否需要将某些内容粘贴到functions.php中?
AndrettiMilas

2
是的,我想这太,它的工作原理,当你设置next_or_numbernext。但是它仅显示“下一个”和“上一个”链接,而不显示数字!
Rutwick Gangurde 2011年

1
如示例所示,我需要两者。
AndrettiMilas

1

这段代码在帖子循环中吗?编码对我来说还可以。这是有关如何使用的食典示例:

<?php

wp_link_pages(array(
    'before' => '<p>' . __('Pages:'),
    'after' => '</p>',
    'next_or_number' => 'number',
    'nextpagelink' => __('Next page'),
    'previouspagelink' => __('Previous page'),
    'pagelink' => '%',
    'echo' => 1 )
);

?>

此代码不起作用。
AndrettiMilas

代码固定。抱歉。一些属性没有值。
Caio Alves

1
这并没有达到我在问题中寻找的结果,仅显示了数字。
AndrettiMilas

0

答案是不同的,但是@荒野无灯的灵感来了,他决定删除他的答案。恕我直言,这是最好的,也是最简单,最灵活的解决方案:

解决方案取决于paginate_links()。唯一要知道的是base从一开始就是URl,后面加上%_%,然后将替换为format。因此,只要我们使用get_permalink().'%_%';,我们知道无论如何我们都将停留在当前职位上。在内部format#用页码替换:

function wpse37256_paginate_paged()
{
    if ( ! $paginate_links = paginate_links( array(
         'type'      => 'array'

        ,'total'     => $GLOBALS['numpages']
        ,'mid_size'  => 1
        ,'end_size'  => 1

        #,'prev_next' => false
        ,'prev_text' => '&laquo; '.__( 'Prev', 'your_textdomain' )
        ,'next_text' => __( 'Next', 'your_textdomain' ).' &raquo;'

        ,'base'      => get_permalink().'%_%'
        ,'format'    => user_trailingslashit( '%#%' )

        ,'current'   => $GLOBALS['page']
    ) ) )
        return;

    echo "<div class='pagination-container'>{$paginate_links}</div>";
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.