私はテーマオプションパネルを作成していて、ユーザーが私のアーカイブやホームページで次へ/前へのリンクまたはページネーションを選択できるようにしたいと思っています。
ユーザーの選択に基づいて選択する機能を作成するには、以下の2つの機能(ページ付けと次の前の機能)を組み合わせる手助けが必要です。
オプションパネルに追加した関数は、次のようになります。
array( "name" => "Paginate or next/previous links?",
"desc" => "Choose your option",
"id" => $shortname."_next_prev_or_paginate",
"type" => "select",
"options" => array("Next/Previous Links", "Pagination"),
"std" => ""),
これが私がページネーションと呼んでいる方法です:
<?php
global $wp_query;
$big = 999999999; // need an unlikely integer
echo paginate_links( array(
'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages
) );
?>
これが私がnext/prevリンクを呼び出す方法です:
<?php previous_posts_link ('Newer') ?>
<?php next_posts_link('Older') ?>
単純なifステートメントは実行すべきです。
function my_theme_navigation() {
if( get_option( $shortname .'_next_prev_or_paginate' ) == 'Next/Previous Links' ) :
// the block for next-prev navigation
else :
// the code for pagination
endif;
}
私はあなたの最初のコードブロックの中の配列が正確に何をするのか知る方法がありません、しかし私はそれを正しくしたと思います。あなたがまだやらなければならない唯一のことは、その変数が保持するものは何でも$shortname
を置き換えることです。グローバルな場合は、関数の先頭にglobal $shortname;
を追加するだけです。私はまた、selectオプションの値がtitleと同じであると仮定しています。
良い仕事だが、私は少し違うやり方だ:
function get_pagination_option() {
$option = get_option(your_option_name_here);
if ($option)? return $option : return 'no_selection';
}
function display_pagination() {
$option = get_pagination_option();
switch($option) {
case 'no_selection':
//handle no pagination selected condition
break;
case 'previous_next':
//handle previous/next pagination selection
break;
case 'full_pagination':
//handle full pagination selection
break;
}
}
どうして?
スイッチ/ケースはわずかに速いです。驚くほど高速ではありませんが、1マイクロ秒ごとに節約できるという習慣があります。
なんらかの理由で、選択がない状況を処理します。
原則として、あなたの機能に1つのことをさせてください。それが多くなればなるほど、それはより柔軟でなくなり、そして誰かがそれをデバッグすることがより困難になります。
私はこれが仕事をする前に提供された解決策を認めますが、これは「ベストプラクティス」の方針に沿っています。
私は@shabushabuに同意します。ifステートメントはおそらく両方の関数を用意したらすぐにうまくいくでしょう。オプションとして wp_pagenavi も追加することを検討します。これは基本的に両方のオプションを組み合わせたものです。