質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.12%

wordpressのページ送りで2ページ目が0件と表示される。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 264

cobra

score 7

 前提・実現したいこと

wordpressで検索結果を表示するページ送り機能を実装したいです。
プラグインを使ってもfunctionにコードを書いても
2ページ目が0件と表示されます。
表示設定をpostname以外にすると検索機能が動作しないので変更できません
/postname/page/2 が表示されません。

 発生している問題・エラーメッセージ

エラーはなし、ページ送りすると2ページ目の検索結果が0件

 該当のソースコード

<?php
$_url = empty($_SERVER['HTTPS']) ? 'http://' : 'https://';
$_url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$url = str_replace(array(home_url() . "/"), "", $_url);
$url_list = explode("/", $url);
$page_id = get_page_by_path( $url_list['0'] );
$adsense_code = get_field('adsense_code', $page_id->ID);
$arr = array(
    'hide_empty' => 0,
    'include' => array(33, 36, 43, 47, 51, 54),
    'parent' => 0,
);
$categories = get_categories($arr);
$_category = array();
foreach($categories as $category) {
    if($category->slug === $url_list[0]){
        $_category = $category;
    }
}
$search_flg = '';
if(isset($_POST['search_flg'])) {
  $search_flg = $_POST['search_flg'];
}
$genre = array();
if(isset($_POST['genre'])) {
    $genre = $_POST['genre'];

$search_sub01 = array();
if(isset($_POST['search_sub01'])) {
  $search_sub01 = $_POST['search_sub01'];
}

$paged = 1;
if(isset($_POST['paged'])) {
 $paged = $_POST['paged'];
} ?>
<?php get_header(); ?> 
  <div id="main">
   <div id="main_contents">
   <div id="kasou_main_contents_body">
    <div class="h2"><img src="<?php bloginfo('template_url'); ?>/image/post/icon.png" /><h2><?php echo $page_id->post_title; ?>検索</h2></div>
 <div id="post_main_contents">
    <div class="post_main_contents_left">
<ul>
<?php
    $arr1 = array(
        'hide_empty' => 0,
        'parent' => $_category->term_id,
    );
    $categories1 = get_categories($arr1);
    if(count($categories1) > 0) {
        foreach($categories1 as $category1) {
?>
                            <li<?php if(!isset($url_list[2]) && $url_list[0] === $category1->slug){ ?> class='active'<?php } ?> id="<?php echo $_category->slug; ?>_<?php echo $category1->slug; ?>"><a href="<?php echo home_url(); ?>/<?php echo $_category->slug; ?>/<?php echo $category1->slug; ?>/"><?php echo $category1->name; ?></a></li>
<?php
            $arr2 = array(
                'hide_empty' => 0,
                'parent' => $category1->term_id,
            );
            $categories2 = get_categories($arr2);
            if(count($categories2) > 0) {
?>
                            <li class="no_list">
                                <ul class="sub_list">
<?php
                foreach($categories2 as $category2) {
?>
 <li<?php if(isset($url_list[2]) && $url_list[2] === $category2->slug){ ?> class='active'<?php } ?> id="<?php echo $_category->slug; ?>_<?php echo $category1->slug; ?>_<?php echo $category2->slug; ?>"><a href="<?php echo home_url(); ?>/<?php echo $_category->slug; ?>/<?php echo $category1->slug; ?>/<?php echo $category2->slug; ?>/"><?php echo $category2->name; ?></a></li>
<?php
 }
?>
</ul>
</li>
<?php
 }
?>
<?php
    }
 }
?>
</ul>
<div class="banner"><?php echo $adsense_code; ?></div>
</div>
<div class="post_main_contents_right">
<div class="h3"><img src="<?php bloginfo('template_url'); ?>/image/post/icon_<?php echo $url_list[0]; ?>.png" /><h3><?php echo $page_id->post_title; ?>情報</h3></div>
<form id="search_form" name="search_form" method="post">
<div class="post_main_contents_right_item01">
<div class="post_main_contents_right01">
<p>genre</p>
<select id="genre" name="genre[]" multiple>
<?php
    $arr1 = array(
        'hide_empty' => 0,
        'parent' => $_category->term_id,
    );
    $categories1 = get_categories($arr1);
    if(count($categories1) > 0) {
        foreach($categories1 as $category1) {
?>
<option value="<?php echo $category1->slug; ?>" <?php if(in_array($category1->slug, $genre)) { ?> selected<?php } ?>><?php echo $category1->name; ?></option>
        <?php
            $arr2 = array(
                'hide_empty' => 0,
                'parent' => $category1->term_id,
            );
            $categories2 = get_categories($arr2);
            if(count($categories2) > 0) {
                foreach($categories2 as $category2) {
?>
<option value="<?php echo $category2->slug; ?>" <?php if(in_array($category2->slug, $genre)) { ?> selected<?php } ?>> <?php echo $category2->name; ?></option>
<?php
                }
            }
        }
    }
?>
</select>                                
<div class="post_main_contents_right02">
<?php
    $arr1 = array(
        'hide_empty' => 0
    );
    $categories1 = get_categories($arr1);
    if(count($categories1) > 0) {
        foreach($categories1 as $category1) {
            if($category1->slug === $url_list[0] . "_sub01") {
?>
<p><?php echo $category1->name; ?></p>
<table class="items">
<tbody>
     <?php
        $arr2 = array(
                    'hide_empty' => 0,
                    'parent' => $category1->term_id,
                );
                $categories2 = get_categories($arr2);
                if(count($categories2) > 0) {
                    $cnt = 0;
                    foreach($categories2 as $category2) {
                        $cnt++;
                        if($cnt === 1) {
?>
<tr>
<?php                     }
?>
<td><label><input type="checkbox" name="search_sub01[]" value="<?php echo $category2->slug; ?>" <?php if(in_array($category2->slug, $search_sub01)) { ?> checked<?php } ?>><?php echo $category2->name; ?></label></td>
<?php
                        if($cnt === 3) {
?>
                                    </tr>
<?php
                            $cnt = 0;
}

                    }
                }
?>
</tbody>
</table>

<?php
            }
        }
    }
?>
<img id="btn_search" src="<?php bloginfo('template_url'); ?>/image/post/btn_search.png" alt="検索" />
<input type="hidden" id="search_flg" name="search_flg" value="1" />
</div>
 </div>
</form>
<div class="post_main_contents_right_item02">
<?php
$category_list = '';
if(isset($url_list[0]) && !empty($url_list[0])) {
    if(!empty($category_list)) {
        $category_list .= "+";
    }
    $category_list .= $url_list[0];
}
if(empty($search_flg)) {
    //検索でない
    if(isset($url_list[1]) && !empty($url_list[1])) {
        if(!empty($category_list)) {
            $category_list .= "+";
        }
        $category_list .= $url_list[1];
    }
    if(isset($url_list[2]) && !empty($url_list[2])) {
        if(!empty($category_list)) {
            $category_list .= "+";
        }
        $category_list .= $url_list[2];
    }
    $args_all = array( 'category_name' => $category_list, 'posts_per_page' => -1, 'order' => 'DESC', 'orderby'=>'post_date');
    $args = array( 'category_name' => $category_list, 'posts_per_page' => 7, 'paged' => $paged, 'order' => 'DESC', 'orderby'=>'post_date');
} else {
    if(!empty($genre)) {
        if(!empty($category_list)) {
            $category_list .= "+";
        }
        $category_list .= implode("+", $genre);
    }
    if(!empty($area)) {
        if(!empty($category_list)) {
            $category_list .= "+";
        }
        $category_list .= implode("+", $area);
    }
    if(!empty($search_sub01)) {
        if(!empty($category_list)) {
            $category_list .= "+";
        }
        $category_list .= implode("+", $search_sub01);
    }

    $args_all = array( 'posts_per_page' => -1, 'order' => 'DESC', 'orderby'=>'post_date');
    $args = array( 'posts_per_page' => 7, 'paged' => $paged, 'order' => 'DESC', 'orderby'=>'post_date');
    if(!empty($category_list)) {
        $args_all["category_name"] = $category_list;
        $args["category_name"] = $category_list;
    }
}
$posts_all = get_posts( $args_all );
$posts = get_posts( $args );
global $wp_query;
$max_page = $wp_query->max_num_pages;
$cnt = 0;
?>
<p>結果 <?php echo count($posts_all); ?></p>
<ul>                        
<?php
if(count($posts)>0) {
    global $post;
    foreach ( $posts as $post ) {
        setup_postdata( $post );

        $title = get_the_title();
        $caption = get_field('caption');
        $photo = get_field('photo');

        $cat = get_the_category();
        $post_area = '';
        foreach($cat as $category) {
            $ancestor_ids = get_ancestors( $category->term_id, 'category' );
            if(in_array(2, $ancestor_ids)
            || in_array(2, $ancestor_ids)) {
                if(!empty($post_area)) {
                    $post_area .= '/';
                }
                $post_area .= $category->name;
            }
        }
        if(empty($post_area)) {
            $post_area = '未設定';
        }
        $post_genre = '';
        foreach($cat as $category) {
            $ancestor_ids = get_ancestors( $category->term_id, 'category' );
            if(in_array($_category->term_id, $ancestor_ids)
            || in_array($_category->term_id, $ancestor_ids)) {
                if(!empty($post_genre)) {
                    $post_genre .= '/';
                }
                $post_genre .= $category->name;
            }
        }
        if(empty($post_genre)) {
            $post_genre = '未設定';
        }
?>
 <li>
 <a href='<?php echo get_permalink(); ?>'>
  <div class="photo"><img src="<?php echo $photo; ?>" alt="写真" /></div>
  <div class="caption">
<div class="caption01">
<p><?php echo $post_area; ?><?php echo $post_genre; ?></p>
<div class="name"><?php echo $title; ?></div>
 </div>
<div class="caption02"><?php echo $caption; ?></div>
  </div> </a>
</li>
<?php
    }
} else {
?>
<li>なし</li>
<?php
}
?>
</ul>    
<?php 
    if (function_exists("pagination")):
        pagination( $wp_query->max_num_pages, 2, true);
    endif;
?>

 試したこと

プラグインでもfunctionにコードを記載しても
同じ症状が発生いたします。

 補足情報

wordpress4.9.8
独自テーマ

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2018/11/14 03:50

    (質問文は編集できます)質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。

    キャンセル

回答 1

checkベストアンサー

+2

斜め読みで回答

メインクエリを用いずにループしてるのに
max_num_pageはメインクエリから取得してたら
ページ数の勘定が合わんのではないでしょうか

メインクエリを上書きして使うのか
メインクエリを無視して処理するのか
どっちかはっきりさせましょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる