サポート » 使い方全般 » 固定ページの記事一覧表示機能について。

  • <ul class="post">
    
    [insert_php]
    $posts = get_posts('numberposts=10&category=3&order=DESC&orderby=ID');
    global $post;
    [/insert_php]
    
    [insert_php]
    if($posts): foreach($posts as $post): setup_postdata($post);
    echo "<li><a href=";
    the_permalink();
    echo ">";
    the_time('Y-m-d');
    echo " ";
    the_title();
    echo "</a>";
    endforeach; endif;
    [/insert_php]
    </ul>

    上記のコードで固定ページに記事一覧として各投稿のリンクを貼っているのですが
    現在最新の10件を表示させていて、10件を超えた場合は次のページという形でリンクを作りたいのですがどうしたら実現できるでしょうか?
    上記コードはinsert PHPというプラグインを使っているためショートコードが入っています。
    またほかにPHPに関する良いプラグインがあったら教えてください。

    よろしくお願いします。

14件の返信を表示中 - 1 - 14件目 (全14件中)
  • こんにちは

    個人的なメモですが

    http://tenman.info/labo/snip/templates/the-loop#h2-post-16247

    に、get_posts()を使ったページング表示のサンプルコードがあります。

    投稿に、phpを書くのではなく、固定ページテンプレートを作成する必要があります。

    例えば、test.phpを作成して、

    /*
     * Template Name: test
     */

    と記述してから、コードをペーストしてください。

    固定ページの作成から、テンプレート test を選択し、保存すると 結果が表示できます。

    ページの本文は、空でいいです。タイトルはテストなので、Test とか、、、

    上記コードはinsert PHPというプラグインを使っているためショートコードが入っています。
    またほかにPHPに関する良いプラグインがあったら教えてください。

    便利だとは思いますが、

    例えば、コードは、何か問題があったり、ワードプレスをアップデートする中で、適正に動作しないコードになってしまう時に、その投稿だけエラーになったりします。

    それに気づくことは、至難の業で、よくそういったサイト(特定のページ等が、エラーをはいている)サイトもありますよね。

    WordPressの基本的なやり方で、勉強していった方が情報も多いですし、上達も早まるので、安易な方法を選択しないほうがいいんじゃないかと、個人的には思います。

    トピック投稿者 kzksai

    (@kzksai)

    >>nobitaさん 返信ありがとうございます

    固定ページテンプレートの件ですが
    各カテゴリーに一覧表示させたかったのでページ自体にコードを書いていたのですが
    やはりカテゴリーに対応する各テンプレートを作成した方がよいのですか?

    <?php
            $posts_per_page= 5;
    
            $paged= get_query_var('paged');
    
            if( empty( $paged ) ) {
    
                $paged= 1;
            }
    
            if ( !isset( $posts_per_page ) ) {
    
                $posts_per_page         = get_option('posts_per_page');
            }
    
            $args= array( 'posts_per_page'=> $posts_per_page,
                            'paged'=> $paged
                        );
    
            query_posts( $args );
    
            while ( have_posts() ) {
    
                the_post();
    
    ?>
        <li>
        <a href="<?php the_permalink();?>"><?php the_time('Y-m-d'); the_title( );?></a>
        </li>
    <?php
    
            }
    
        posts_nav_link('|', '<span class="next"><< 次の5件</span>', '<span class="prev">前の5件 >></span>');
    
        wp_reset_query();
    ?>

    上記コードで全体の記事一覧は表示させることが出来ましたが
    カテゴリ分けはどうしたらいいでしょうか?

    トピック投稿者 kzksai

    (@kzksai)

    >>3に追記ですが
    query_postとget_postsはどっちを使った方が良いですか?

    query_postはメインループを変更してしまうのでオススメしません。

    どちらかと言われればget_postsのほうが良いですが
    pre_get_postsというフックを調べてみてください。

    ちなみに
    単純にカテゴリー毎に投稿を吐き出したいということであれば
    テーマ内に
    「category-カテゴリスラッグ.php」
    というテンプレートファイルを作れば、
    wordpressが自動的にこのファイルを読み込んでくれます。

    お使いのテーマにarchive.phpはありますか?
    このファイルをコピー&リネームして使ってみてください。
    Template Nameを記述する必要もありません。

    パーマリンクの設定にもよりますが
    http://ドメイン/category/カテゴリスラッグ
    のURLでカテゴリーごとの一覧を表示してくれると思います。

    ページングにはプラグインを使うとお手軽です。
    個人的には
    wp-pagenavi
    をオススメします。

    nobitaさんも書いていらっしゃいますが
    phpコードを記事に書く方法は
    私もお勧めしません。

    トピック投稿者 kzksai

    (@kzksai)

    TomoeIntlさん 返信ありがとうございます。

    nobitaさんも書いていらっしゃいますが
    phpコードを記事に書く方法は
    私もお勧めしません。

    そうですか、では使わない方法で対応してみたいと思います。

    単純にカテゴリー毎に投稿を吐き出したいということであれば
    テーマ内に
    「category-カテゴリスラッグ.php」
    というテンプレートファイルを作れば、
    wordpressが自動的にこのファイルを読み込んでくれます。

    投稿を吐き出すのではなく、記事タイトル一覧とリンクを表示させたいのですが
    上記の方法で可能でしょうか?

    カテゴリアーカイブに、投稿一覧のページングを使う事は出来ません。

    理由は、カテゴリーアーカイブもページング機能を普通は持っていますので、別々には動作しないだろうと思います。

    ページング専用のクエリを登録するとかのカスタマイズが必要になるでしょう。

    または、

    そのような場合は、一例としては、ページネーションをjavascriptに任せる方法もあります。

    http://tenman.info/labo/snip/templates/the-loop/javascript-pagenation

    ただ、これは、WordPress 以外の方法になりますが、

    トピック投稿者 kzksai

    (@kzksai)

    nobitaさん
    ではテンプレートをつくって
    get_postsで書くという方法で実現可能ということですね?

    テンプレートを作れば、可能です。

    トピック投稿者 kzksai

    (@kzksai)

    具体的にどのように書けば可能でしょうか?
    無知ですみません。。。

    メールマガジンは下記よりご覧いただけます。

    ・2015-02-05 【メルマガ】xxxxxx
    ・2015-01-29 【メルマガ】xxxxxx
    ・2015-01-22 【メルマガ】xxxxxx
    ・2015-01-15 【メルマガ】xxxxxx
    ・2015-01-08 【メルマガ】xxxxxx

    のようにメルマガのカテゴリがあって
    固定ページに上記のように表示させたいのですが、調べて書いてみたものの
    うまく表示させることが出来ませんでした。

    get_posts で書くこともできますが、

    @tomoeintlさんの言われるように、

    テーマ内に
    「category-カテゴリスラッグ.php」
    というテンプレートファイルを作れば、
    wordpressが自動的にこのファイルを読み込んでくれます。

    という方法ならば、面倒な、コードを書かなくてもできます。

    category.php があれば、それを
    archive.phpがあれば、それを、
    なければ、index.phpをコピーして、category-カテゴリスラッグ.php(category-カテゴリID.phpでもよい)を作ります。

    後はhtmlを調整して望みの
    形で出力するように、調整すればいいです。

    とりあえず、ここまでで出来ると思いますが、

    ガテゴリのページングとは別に、他にページング機能を持たせる方法に、

    wp-pagenaviに wp_Query オブジェクトを引数にしてページングする方法があったと思いますので、後で調べてみるといいと思います。

    nobitaさん
    横槍を入れてしまいすみませんでした。
    そして補足説明有難うございます。

    書き添えるのを失念しておりましたが
    wp_pagenaviをインストールしただけではcategory.php内では作動しません。

    制作したcategory.phpテンプレートの中に
    wp_pagenavi();

    という関数を書き加えてみてください。
    書き加えた場所にページングのHTMLを吐き出してくれます。

    もちろんwhileループの外です。
    wp_pagenaviのインストールをお忘れなく。

    function_existsによる関数の存在確認もしたほうが良いと思います。

    if (function_exists(‘wp_pagenavi’)){
    wp_pagenavi();
    }

    nobitaさんがおっしゃるように
    wp_pagenavi()はwp_queryを受け取ってくれます。

    ですがcategoryテンプレートの中で使用するなら
    wp_queryを渡す必要はありません。

    横から失礼しました。

    @tomoeintlさん

    横槍を入れてしまいすみませんでした。

    いえ、横槍こそが大事です

    wp_pagenavi()はwp_queryを受け取ってくれます。

    ですがcategoryテンプレートの中で使用するなら
    wp_queryを渡す必要はありません。

    チョット誤解と、訂正があるのですが、wp_query()を引数に入れる件は、説明が悪かったのですが、サブナビゲーション用に使えないかと思って書き込んでおいたので、メインのカテゴリのナビゲーションとして使うと考えたものではありませんでした。

    この際なので、検証してみました

    アーカイブ系または、indexテンプレートに

    <?php get_template_part( 'loop', $raindrops_document_type ); ?>
    		<br style="clear:both" />
    	<?php get_template_part( 'test' ); ?>
    		<br style="clear:both" />

    test.php

    $posts_per_page             = 6; //ページあたりのリンク件数
    $paged                      = '';
    $content                    = '';
    $html_structure             = '<li><a href="%1$s">%2$s</a></li>';
    $html_list_wrapper          = '<ul>%1$s</ul>';
    $html_pagenate_links_wrapper= '<p class="pagenate_links">%1$s</p>';
    
    $paged= get_query_var('paged');
    
    if ( !isset( $posts_per_page ) ) {
    
        $posts_per_page         = get_option('posts_per_page');
    }
    
    $args= array('paged'=> $paged , 'posts_per_page'=> $posts_per_page );
    
    if ( ! is_paged() ) {
    
        $args['numberposts']    = $posts_per_page;
        $paged                  = 1;
    } elseif($paged== 2) {
    
        $args['offset']         = $posts_per_page;
    } else {
    
        $args['offset']         = $posts_per_page * ( $paged-1 );
    }
    
    $args['category_name'] = 'Uncategorized';
    
    $paging_contents = new wp_Query( $args );
    
     while ($paging_contents->have_posts() ){
    	 $paging_contents->the_post();
    	 $content .= sprintf( $html_structure, get_permalink() , the_title('','',false) );
     }
        printf( $html_list_wrapper, $content );
    
    if (function_exists('wp_pagenavi')){
    
    	 wp_pagenavi( array( 'query' => $paging_contents ) );
    }
    
    wp_reset_postdata();

    としたら、サブページネーションが可能かもしれないと思い書き込んだのですが、

    こんな感じ

    http://tenman.info/labo/snip/files/sub-navigation-test.png

    検証してみると、動作は上手くいきませんでした。(サブナビゲーションとしては使えそうにない)

    なので、
    @kzksai さん wp_pagenav() の事は、とりあえず忘れてください。

    現状だと、リクエストクエリを別途追加して、

    http://tenman.info/labo/snip/templates/the-loop#h2-post-16249

    とか、jQueryなのかなと考えていますが、

    @tomoeintl さん なにか、wp_pagenavi() を使って、サブページングをつくる良い方法があれば、もう一本横槍いただけるとうれしいんですが :)

    トピック投稿者 kzksai

    (@kzksai)

    お二方ともありがとうございます。

    @kzksai さん wp_pagenav() の事は、とりあえず忘れてください。

    はい。
    いったん教えてもらったことを整理して再挑戦させて頂きます。

    トピック投稿者 kzksai

    (@kzksai)

    どなたかご覧になっていますでしょうか?

    <?php
            $posts_per_page= 7;
    
            $paged= get_query_var('paged');
    
            if( empty( $paged ) ) {
    
                $paged= 1;
            }
    
            if ( !isset( $posts_per_page ) ) {
    
                $posts_per_page         = get_option('posts_per_page');
            }
    
            $args= array( posts_per_page => $posts_per_page,
                            paged => $paged,
                            cat =>3
                        );
    
            query_posts( $args );
    
            while ( have_posts() ) {
    
                the_post();
    
    ?>
        <li>
        <a href="<?php the_permalink();?>"><?php the_time('Y-m-d'); the_title( );?></a>
        </li>
    <?php
    
            }
    
        posts_nav_link('|', '<span class="next"><< 次の5件</span>', '<span class="prev">前の5件 >></span>');
    
        wp_reset_query();
    ?>

    これと同じことをquery_postsを使わずに行いたいのですが
    どうすれば実現できますか?

14件の返信を表示中 - 1 - 14件目 (全14件中)
  • トピック「固定ページの記事一覧表示機能について。」には新たに返信することはできません。