web-dev-qa-db-ja.com

ユーザーにページ付けまたは次/前(結合)の選択を許可する

私はテーマオプションパネルを作成していて、ユーザーが私のアーカイブやホームページで次へ/前へのリンクまたはページネーションを選択できるようにしたいと思っています。

ユーザーの選択に基づいて選択する機能を作成するには、以下の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') ?>
1
AndrettiMilas

単純な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と同じであると仮定しています。

3
shabushabu

良い仕事だが、私は少し違うやり方だ:

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マイクロ秒ごとに節約できるという習慣があります。

  2. なんらかの理由で、選択がない状況を処理します。

  3. 原則として、あなたの機能に1つのことをさせてください。それが多くなればなるほど、それはより柔軟でなくなり、そして誰かがそれをデバッグすることがより困難になります。

私はこれが仕事をする前に提供された解決策を認めますが、これは「ベストプラクティス」の方針に沿っています。

0
akamaozu

私は@shabushabuに同意します。ifステートメントはおそらく両方の関数を用意したらすぐにうまくいくでしょう。オプションとして wp_pagenavi も追加することを検討します。これは基本的に両方のオプションを組み合わせたものです。 wp_pagenavi

0
WouterB