web-dev-qa-db-ja.com

ページ投稿 - 数字と次/前のリンクの使い方

Wp_link_pages(複数ページの投稿)にページ番号、それらの番号の前に「前」の単語、そしてそれらの番号の後に「次」を表示させたい。これは次のようになります。

前1、2、3、4次

私はこれをwithoutプラグインでやろうとしています。これが私がこれまでに試したことですが、それは機能していません。数字を表示するだけです。

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

あなたが使っている関数、 wp_link_pages コーデックス は、デフォルトでは探している機能を持っていません。

しかし、その関数の引数に filter として登録されているコールバック関数を使うことで簡単に拡張できます。

add_filter('wp_link_pages_args', 'wp_link_pages_args_prevnext_add');

フィルタはその関数で使用されているパラメータを変更します on-the-fly そして の左側と右側に出力される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 )
);

あなたのテーマの always がprevとnextのリンクを使うのであれば、numberデフォルト)が使われるときはいつでも関数をデフォルトの振る舞いにするために少し変更することができます。

これは_とは若干異なる実装です( Velvet Blues で推奨)。

12
hakre

wp_link_pages()関数はどちらかテキストまたは数値のみを表示します。両方を表示することはできません。関数のコードを見てみると、パラメータを渡して動作が異なるようにすることはできません。

そうは言っても、プラグインなしでこれを行うには3つの方法があります。

  1. テーマのfunctions.phpファイルに独自の関数を作成してください。 動作しますが、それから新しい機能があります。
  2. wp_link_pages()のインスタンスを2〜3個使用します。 非常に非効率的なハック。
  3. フィルターを使用してください。 推奨される方法 。下記参照。

私は自分のブログにこれを行う方法についての記事を書きました。基本的には、 wp_link_pages_args フィルタを使い、functions.phpファイルに新しいオプション 'next_and_number'を追加する関数を追加します。

WordPress Hack:wp_link_pages()で表示番号と次へ/前へのリンク

6
Velvet Blues

これを試して、あなたはそれをもっとカスタマイズすることができます。しかしそれはあなたが望んだようにするべきです:-)

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

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

このコードは投稿のループですか?コーディングは私には問題ありません。使用方法に関するコーデックスの例は次のとおりです。

<?php

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

?>
1
Caio Alves

何が問題なのかわかりません…何かエラーがありますか?

これはうまくいくはずです。

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

wp_link_pages($args);
?> 

Numberがすでにデフォルトであるため、next_or_numberを追加する必要はありません。

1
Mat_

答えは異なりますが、それは彼の答えを削除することにした@荒野无灯に触発されました。 Imhoそれは最も簡単で柔軟な解決策として、最高です。

解決策は 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>";
}
0
kaiser