keikkkk
@keikkkk (P 山本)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ページネーションを作成していますが、JQが上手く設定できません。

WordPressでサイトを作成しています。初心者です。
アーカイブページで、ページネーションを入れたいです。

その際に、下記のサイトでやっていますがうまくいきません。
https://shanabrian.com/web/jquery/pagination.php
この通りにやってます。

実際にやってみると表示されるサイトが10で、ページネーションのリンクの数も3とか5とかが、理想ですが、1つしかリンク(他のページに飛べる数字のついたリンク)がないなど、(下記写真)
逆に多くのリンク(他のページに飛べる数字のついたリンク)があるが1つの記事しか表示されないなどの、上手く行かないことがあります。

私はJQを普段コピペで使うなど、理解が足らないことがあります。

footer.php

<script>
$(function() {
    $('.items').pagination({
        itemElement              : '> div',(ここの設定を>divにするかdivにするかによて10表示されたりします。)
        paginationClassName      : 'pagination',
        paginationInnerClassName : 'clearfix',
    
    });
});

$(function() {
    var $sample = $('.item').pagination({
        itemElement              : '> li',
        paginationClassName      : 'pagination',
        paginationInnerClassName : 'clearfix'
    });
 
    $('.item').on('click', function() {
        $sample.movePage(3);
        return false;
    });
});
</script>

archive.php

  <div class="list-box">
                        <ul class="items">
                            <?php
                            $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
                            $the_query = new WP_Query(array(
                                'post_status'    => 'publish',
                                'post_type'      => 'post', // ページの種類(例、page、post、カスタム投稿タイプ)
                                'paged'          => $paged,
                                'posts_per_page' => 10, // 表示件数
                                'orderby'        => 'date',
                                'order'          => 'DESC'
                            ));
                            if ($the_query->have_posts()) :
                                while ($the_query->have_posts()) : $the_query->the_post();?>
                                    <?php  start ?>
                                         <?php if (have_posts()) : while (have_posts()) : the_post(); ?> 
                                             <div class="item">
                                            <article class="blog-list__list-item">  
                                                <div class="blog-list-wrapper-second">
                                                    <?php  start ?>
                                                    <div class="blog-item-thumbnail-second">
                                                        <?php if (has_post_thumbnail()) : ?>
                                                            <div class="thumbnail-image-second"><?php the_post_thumbnail(array(240, 148)); ?></div>
                                                        <?php else : ?>
                                                            <div class="thumbnail-image-second">
                                                                <img src="<?php echo get_template_directory_uri(); ?>/images/sample4.png" alt="" width="240" height="148" />
                                                            </div>
                                                        <?php endif; ?>
                                                    </div>
                                                    <?php end ?>
                                                </div>
                                                <div class="blog-item-content">
                                                    <p class="blog-item-day-second"><?php the_time('Y-m-d'); ?></p>
                                                    <?php  start  ?>
                                                    <a href="<?php the_permalink(); ?>" class="blog-item">
                                                        <h3 class="blog-item-title">
                                                            <div class="blog-item-title-container">
                                                                <?php
if (mb_strlen($post->post_title, 'UTF-8') > 20) {
                                                                    $title = mb_substr($post->post_title, 0, 20, 'UTF-8');
                                                                    echo $title . '…';
                                                                } else {
                                                                    echo $post->post_title;}?>
                                                    </a>
                                                </div>
                                                <?php  end ?>
                                                <div class="blog-item-txt">
                                                    <?php start ?>
                                                    <?php the_excerpt(); ?>
                                                    <?php  end ?>
                                                </div>
                                            </article>
                                            </div> 
                                            <?php break; ?>
                                        <?php endwhile; ?>    
                                        <?php while (have_posts()) : the_post(); ?>
                                             <div class="item">
                                            <article class="blog-list__list-item">
                                        
                                                <div class="blog-list-wrapper-second">
                                                    <?php start ?>
                                                    <div class="blog-item-thumbnail">
                                                        <?php if (has_post_thumbnail()) : ?>
                                                            <div class="thumbnail-image">
                                                                <?php the_post_thumbnail(array(240, 179)); ?>
                                                            </div>
                                                        <?php else : ?>
                                                            <div class="thumbnail-image">
                                                                <img src="<?php echo get_template_directory_uri(); ?>/images/sample4.png" alt="" width="240" height="179" />
                                                            </div>
                                                        <?php endif; ?>
                                                    </div>
                                                    <?php end ?>
                                                </div>
                                                <div class="blog-item-content">
                                                    <p class="blog-item-day-second"><?php the_time('Y-m-d'); ?></p>
                                                    <?php  start ?>
                                                    <a href="<?php the_permalink(); ?>" class="blog-item">
                                                        <h3 class="blog-item-title">
                                                            <?php
                                                            if (mb_strlen($post->post_title, 'UTF-8') > 20) {
                                                                $title = mb_substr($post->post_title, 0, 20, 'UTF-8');
                                                                echo $title . '…';
                                                            } else {
                                                                echo $post->post_title;
                                                            }
                                                            ?></h3>
                                                    </a>
                                                    <?php  end ?>
                                                    <?php  start ?>
                                                    <div class="blog-item-excerpt">
                                                        <?php echo mb_substr(get_the_excerpt(), 0, 50) . '[...]'; ?>
                                                    </div>
                                                    <?php  end ?>                 
                                            </article> 
                                           </div>
                                        <?php endwhile; ?>
                                    <?php endif; ?>    
                                    <?php  end ?>
                                    <?php break; ?>      
                            <?php  endwhile;
                            else :   echo '<div><p>ありません。</p></div>';
                            endif; ?>
                        </ul>
                    </div>

写真には10の記事が出ていますが、1つしかページネーションが出ません、
記事の数は合計30ぐらいはあります。

スクリーンショット 2022-04-26 11.43.37.png

何卒宜しくお願いします。

*マルチポストにします
https://teratail.com/questions/q52djcb3y7id1f
https://ja.stackoverflow.com/questions/88502/%e3%83%9a%e3%83%bc%e3%82%b8%e3%83%8d%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e4%bd%9c%e6%88%90%e3%81%97%e3%81%a6%e3%81%84%e3%81%be%e3%81%99%e3%81%8c-jq%e3%81%8c%e4%b8%8a%e6%89%8b%e3%81%8f%e8%a8%ad%e5%ae%9a%e3%81%a7%e3%81%8d%e3%81%be%e3%81%9b%e3%82%93

0

3Answer

他のサイトは知りませんが、Qiitaでは(多分)マルチポスト自体がダメという明示的なものはありませんし、そもそも配慮自体あれば問題はないと思ってますが、
毎回ほぼ回答者に丸投げの質問で、自分でどのように試行錯誤したかも書いておらず、今回に至ってはソースさえまともにかけていない状態になっており、基本的な配慮に欠けています。

一度ガイドラインに目を通すことをお勧めします。

1Like

Comments

  1. @keikkkk

    Questioner

    https://shanabrian.com/web/jquery/pagination.php
    がソースです、
    一様書いてあります、今回コードのほうが、変になっていましたすいません。
    丸投げといいますか、行き詰まったので、ヒントがほしいと思っています。
  2. ×一様 ○一応

    まあ誤字はいいのですが、(エンジニアとして、全角半角を含めて誤記には気を付けてください)
    それはソースではなくて、参考にしたサイトではないですか?(まあソースには情報源という意味もありますが)
    ソース自体は直したようですが、無駄にインデントされていてとても見づらいので、そういうのを解消しようとは思わないのでしょうか。

    質問自体というか、そのサイトを見ただけでわかることで一応答えますと、
    itemElementは「子孫要素の指定」なので、ページネーションをしたい全体の要素(今回は.items)に対して、何の要素を分割(ページネーション)したいかを指定します。

    .itemsに対して「> div」または「div」を指定することは、
    「.item > div」と「.item div」の違いについて理解する必要があります。

    「.item > div」は「.item 直下の子要素」
    「.item div」は「.item 以下 の子(孫)要素」
    です。
    divは直下以外にもいっぱいあるのでどのような挙動になってるかはわかりませんが、適切なクラスを設定した方が無難だと思います。

    子孫セレクタについて詳しく知りたい場合はご自身で調べてください。

  3. @keikkkk

    Questioner

    ヒントを頂きありがとうございます、
    参考にします。
    ソースについては、純粋に意味だけを言うと情報源ですのでそう受け取りました。
    今回はおそらく、ソースコードを訳したということですよね?
    インデントが、見にくいということでしたので気をつけます。
  4. ソースはプログラミングをやる上では「ソースコード」「ソースプログラム」の意味の方が強いです。
    プログラミングの質問では大抵「ソースコード」が重要ポイントなので、恐らくほとんどの人はこちらの意味でとらえると思います。
    言ってしまえば「専門用語」ですので、純粋な意味は二の次です。
    この場面で「プログラム」と聞いて、テレビ番組や音楽発表会のプログラムだなんて思いませんよね?それと同じレベルです。
    (そもそも日本語だと「ソース」は多分カツにかける奴が「純粋な意味」だと思う)

    「丸投げ」というのは、「回答者が読みやすく、見やすく、答えやすい工夫をしていない」という意味です。
    そういう点に気を付ければ、優しく回答してくれる方がいるかもしれませんね。

ご思案頂きありがとうございます。
paginationClassName : 'pagination',を2回使っわずに、
itemElement : '.item',このようにクラス名指定にして、さらに、
functions.phpのファイルに設定した。 add_action( 'pre_get_posts', function ( $query ) { if ( !is_admin() && $query->is_main_query()) { // 管理画面ではないメインクエリの場合 if ( is_archive( ) ) { $query->set( 'posts_per_page' ,10 ); // カテゴリーアーカイブで表示したい数 } } return $query; } );の10という指定をはずすとうまくいくみたいです。
この数を指定しなくてもいい方法を探します。
function.phpは関係ないと思い、ソースコードを書いていませんでしたすいません。

0Like

ご思案くださった方々大変、ありがとうございました!!
add_action( 'pre_get_posts', function ( $query ) {
if ( !is_admin() && $query->is_main_query()) {
// 管理画面ではないメインクエリの場合
if ( is_archive( ) ) {
$query->set( 'posts_per_page' , -1 ); // カテゴリーアーカイブで表示したい数
}
}
return $query;
} );

-1と指定することで全てを表示させることが出来ます。
上記のコードをfunction.phpに入れることで可能になりました。
また、
paginationClassName : 'pagination',となっているのに、HTMLに.paginationが存在しない。
paginationClassName : 'pagination',としているページネーションが複数設定されているので、衝突してそう。
などの解決と、
書きを理解してclass名で指定するなどをすることで、可能になります。
.itemsに対して「> div」または「div」を指定することは、
「.item > div」と「.item div」の違いについて理解する必要があります。
「.item > div」は「.item 直下の子要素」
「.item div」は「.item 以下 の子(孫)要素」
です。
divは直下以外にもいっぱいあるのでどのような挙動になってるかはわかりませんが、
適切なクラスを設定した方が無難。

0Like

Your answer might help someone💌