固定ページの記事一覧表示機能について。
-
<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に関する良いプラグインがあったら教えてください。よろしくお願いします。
-
こんにちは
個人的なメモですが
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の基本的なやり方で、勉強していった方が情報も多いですし、上達も早まるので、安易な方法を選択しないほうがいいんじゃないかと、個人的には思います。
>>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(); ?>
上記コードで全体の記事一覧は表示させることが出来ましたが
カテゴリ分けはどうしたらいいでしょうか?query_postはメインループを変更してしまうのでオススメしません。
どちらかと言われればget_postsのほうが良いですが
pre_get_postsというフックを調べてみてください。ちなみに
単純にカテゴリー毎に投稿を吐き出したいということであれば
テーマ内に
「category-カテゴリスラッグ.php」
というテンプレートファイルを作れば、
wordpressが自動的にこのファイルを読み込んでくれます。お使いのテーマにarchive.phpはありますか?
このファイルをコピー&リネームして使ってみてください。
Template Nameを記述する必要もありません。パーマリンクの設定にもよりますが
http://ドメイン/category/カテゴリスラッグ
のURLでカテゴリーごとの一覧を表示してくれると思います。ページングにはプラグインを使うとお手軽です。
個人的には
wp-pagenavi
をオススメします。nobitaさんも書いていらっしゃいますが
phpコードを記事に書く方法は
私もお勧めしません。TomoeIntlさん 返信ありがとうございます。
nobitaさんも書いていらっしゃいますが
phpコードを記事に書く方法は
私もお勧めしません。そうですか、では使わない方法で対応してみたいと思います。
単純にカテゴリー毎に投稿を吐き出したいということであれば
テーマ内に
「category-カテゴリスラッグ.php」
というテンプレートファイルを作れば、
wordpressが自動的にこのファイルを読み込んでくれます。投稿を吐き出すのではなく、記事タイトル一覧とリンクを表示させたいのですが
上記の方法で可能でしょうか?カテゴリアーカイブに、投稿一覧のページングを使う事は出来ません。
理由は、カテゴリーアーカイブもページング機能を普通は持っていますので、別々には動作しないだろうと思います。
ページング専用のクエリを登録するとかのカスタマイズが必要になるでしょう。
または、
そのような場合は、一例としては、ページネーションをjavascriptに任せる方法もあります。
http://tenman.info/labo/snip/templates/the-loop/javascript-pagenation
ただ、これは、WordPress 以外の方法になりますが、
具体的にどのように書けば可能でしょうか?
無知ですみません。。。メールマガジンは下記よりご覧いただけます。
・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を渡す必要はありません。横から失礼しました。
横槍を入れてしまいすみませんでした。
いえ、横槍こそが大事です
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() を使って、サブページングをつくる良い方法があれば、もう一本横槍いただけるとうれしいんですが :)
どなたかご覧になっていますでしょうか?
<?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を使わずに行いたいのですが
どうすれば実現できますか?
- トピック「固定ページの記事一覧表示機能について。」には新たに返信することはできません。