0

ブログ投稿用の WordPress のメイン ループを変更し、送信されたフィルターに応じてさまざまな種類の投稿をクエリおよびループするようにしました。

HTML の先頭には、オプションとしていくつかのボタンを備えたフォームがあります。これは、SA サイトのメニューに似ています: 質問 タグ ユーザー バッジ 未回答。

訪問者がメニュー ボタンの 1 つをクリックすると、新しい WP_Query が送信されます。

オプションの下には投稿のループがあり、送信されたフィルターによって異なります。

PHP コードは基本的に、カスタマイズされた機能を備えた標準の wordpress ループです。

   $args= !empty($_POST['filter']) ? $_POST['filter']:null;
    get_option_nav();
    if( my_loop_have_posts(array('filter'=>$args))):
    while my_loop_posts(): the_my_loop_post();
    get_template_part('contents');
    endwhile;
    endif;

デフォルトのフィルターのみが正しいページネーション リンクを取得することを除いて、問題なく動作しています。新しいフィルターを送信した後、ページネーション リンクをクリックすると、既定のフィルターのページに移動します。wordpress のページネーション リンクを変更して、他のフィルターで機能させるにはどうすればよいですか?

クエリ引数に使用するコードは次のとおりです。

function get_args($args){
$defaults= array( 
    'order' => 'DESC', 
    'orderby' => 'modified', 
    'max_num_pages' =>5, 
    'paged' => get_paged (), 
    'post_status' => 'any', 
    'post_type' => array ('post', 'docs','topics'),
    'posts_per_page' => 5,
   )
$args = wp_parse_args ( $args, $defaults );
extract ( $args );
if(!empty($args['filter'])){
   switch ($args['filter']){
      case 'top_voted':
         $args['post_type'] = 'docs';
         $args['meta_key'] = '_vote_total';
         $args['order'] = 'DESC';
         $args['orderby']='meta_value_num';
       break;
      case 'unanswered_questions':
         $args['post_type] = 'topics';
         $args['blabla'] = 'blabla';
      break;
      default:
          blabla;
       break;
}
return $args;
}

およびページングのコード:

function get_paged() {
    global $wp_query;
    if ( get_query_var( 'paged' ) ) {
        $paged = get_query_var( 'paged' );

    } elseif ( ! empty( $wp_query->query['paged'] ) ) {
        $paged = $wp_query->query['paged'];
    }

    if ( ! empty( $paged ) )
        return (int) $paged;

    return 1;
}
4

1 に答える 1

0

カスタム クエリを作成するときは、クエリのすべてのパラメーターを明示的に呼び出す必要があります。したがって、ページネーションの場合と同様に、標準のものは消えます。

この新しいクエリの作成方法に応じて、次を試すことができます。

  • たとえば、最初に $query_string を連結する $query = new WP_Query( $query_string . 'order=DESC' )には、Codex で説明されているように:

現在のクエリを生成するために使用された元のクエリ パラメータ情報を保持し、いくつかのパラメータを追加または上書きする場合は、query_posts() の呼び出しで $query_string グローバル変数を使用できます。

  • デフォルトのクエリからページネーションを取得し、それをカスタム クエリで使用するには $paged = get_query_var('paged'); $query = new WP_Query( array( 'paged' => $paged ) );

あなたの場合、 get_paged() 関数に何か問題があります。テストしましたが動作しませんが、バグは見つかりませんでした。代わりに、私が普段使っているものを試してみましたが、うまくいきました:

function get_paged() {
    if ( get_query_var('paged') ) {
        $paged = get_query_var('paged');
                } elseif ( get_query_var('page') ) { $paged = get_query_var('page');
                } else { $paged = 1; }
        return $paged;
    }

else if ステートメントで何かが失敗しているようです。これで問題が解決するかどうかお知らせください。

于 2012-10-29T22:54:56.117 に答える