ブログ投稿用の 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;
}