ページングされた投稿-数字と次/前のリンクの使用方法


17

wp_link_pages(複数ページの投稿)にページ番号、それらの番号の前にある「前」という単語、およびそれらの番号の後にある「次」を表示するようにします。次のようになります。

前へ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'
)); ?>

回答:


12

使用している関数wp_link_pagesCodexには、デフォルトでは探している機能がありません。

ただし、その関数の引数のフィルターとして登録されたコールバック関数を使用して、簡単に拡張できます。

add_filter('wp_link_pages_args', 'wp_link_pages_args_prevnext_add');

フィルタは、その関数使用されるパラメータをオンザフライで変更し、番号付きリンクリスト()の左側と右側に出力されるprevand next引数に欠落しているリンクを挿入します。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のソリューション。StackExchangeでは、完全な回答(=外部ソースに依存せずに理解できる)が常に優先されます。
FUXIA

6

このwp_link_pages()関数はテキストまたは数値のみを表示し、両方を表示することはありません。関数のコードを見ると、パラメーターを渡すことで異なる動作をさせるオプションがないことがわかります。

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

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

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

WordPressハック:wp_link_pages()で番号と次/前のリンクを表示する


かっこいい...私は4つのグローバルな値を使用して何かを考えていましたが、実際に解決策にたどり着くことはありませんでした... +1!
ラトウィックガンガード

3

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

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

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

どのように管理できますか?wordpress.org/support/topic/… またはページ番号の前にdynamic-custom-titleを追加する方法。
ラヴィパテル16

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を追加する必要はありません。


何らかの理由でこれは機能しませんが、私には正しいようです。3.3に変更があったのか、functions.phpに何かを貼り付ける必要があるのだろうか?
AndrettiMilas

2
はい、これも試してみnext_or_numberましたnext。に設定すると動作します。しかし、数字ではなく、「次へ」リンクと「前へ」リンクのみが表示されます!
ラトウィックガンガード

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

コードが修正されました。ごめんなさい。一部の属性には値がありません。
カイオアルベス

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>";
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.