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'
)); ?>
あなたが使っている関数、 wp_link_pages
コーデックス は、デフォルトでは探している機能を持っていません。
しかし、その関数の引数に filter として登録されているコールバック関数を使うことで簡単に拡張できます。
add_filter('wp_link_pages_args', 'wp_link_pages_args_prevnext_add');
フィルタはその関数で使用されているパラメータを変更します on-the-fly そして の左側と右側に出力されるprev
と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 )
);
あなたのテーマの always がprevとnextのリンクを使うのであれば、number
デフォルト)が使われるときはいつでも関数をデフォルトの振る舞いにするために少し変更することができます。
これは_とは若干異なる実装です( Velvet Blues で推奨)。
wp_link_pages()
関数はどちらかテキストまたは数値のみを表示します。両方を表示することはできません。関数のコードを見てみると、パラメータを渡して動作が異なるようにすることはできません。
そうは言っても、プラグインなしでこれを行うには3つの方法があります。
wp_link_pages()
のインスタンスを2〜3個使用します。 非常に非効率的なハック。 私は自分のブログにこれを行う方法についての記事を書きました。基本的には、 wp_link_pages_args フィルタを使い、functions.phpファイルに新しいオプション 'next_and_number'を追加する関数を追加します。
これを試して、あなたはそれをもっとカスタマイズすることができます。しかしそれはあなたが望んだようにするべきです:-)
function tp_link_pages() {
global $page, $numpages;
echo paginate_links( array(
'format' => get_permalink() . '%#%/',
'current' => $page,
'total' => $numpages
) );
}
このコードは投稿のループですか?コーディングは私には問題ありません。使用方法に関するコーデックスの例は次のとおりです。
<?php
wp_link_pages(array(
'before' => '<p>' . __('Pages:'),
'after' => '</p>',
'next_or_number' => 'number',
'nextpagelink' => __('Next page'),
'previouspagelink' => __('Previous page'),
'pagelink' => '%',
'echo' => 1 )
);
?>
何が問題なのかわかりません…何かエラーがありますか?
これはうまくいくはずです。
<?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を追加する必要はありません。
答えは異なりますが、それは彼の答えを削除することにした@荒野无灯に触発されました。 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' => '« '.__( 'Prev', 'your_textdomain' )
,'next_text' => __( 'Next', 'your_textdomain' ).' »'
,'base' => get_permalink().'%_%'
,'format' => user_trailingslashit( '%#%' )
,'current' => $GLOBALS['page']
) ) )
return;
echo "<div class='pagination-container'>{$paginate_links}</div>";
}