<?php if(have_posts()): while(have_posts()): the_post(); ?> <h2><?php the_title(); ?></h2> <?php the_content(); ?> <?php endwhile; endif; ?>
個人的備忘録です。
Wordpressを使ってるとphpを使って条件分岐させる事が出来れば楽なんだけどなって事が多々出てきます。新着情報とかカテゴリ表示とかで表示させたい件数や条件を変えたりとかね。そこで、それらを簡単なphpで実現する方法を、俺と同じようなphp初心者さんの為と自分自身への備忘録の意味も込めて掲載します。
まずは上記は基本ループ。
これが無ければ始まりませんよね。
メインループとサブループ
通常のループは上記の通りなんですが、場合によっては1ページ内に複数のループが必要な場合があります。そんな時によく使われるのが【query_posts】と言う関数なんです。新着情報を5件表示させてみます。
<?php query_posts('posts_per_page=5&paged='.$paged); ?> <?php if (have_posts()) : while(have_posts()) : the_post(); ?> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br /> <span><?php the_time('m月d日H時i分'); ?></span><br /> <?php endwhile; endif; ?> <?php wp_reset_query(); ?>
【posts_per_page=5】で新着記事を5件表示されるように設定しています。これでも問題が無い場合も多いのですが、【query_posts】はメインクエリの表示条件を変更する物なので基本的に1ページに1度しか使えません。複数使うと有名なページャープラグイン「WP-PageNavi」などで不具合が発生したりします。
そこで、1ページ内でメインループの他にもう一つループを使いたい時は下の様に記述します。メインループに対してサブループって言うみたいです。
<?php global $post; $myposts = get_posts('posts_per_page=5&paged='.$paged); foreach( $myposts as $post ) : setup_postdata($post); ?> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br /> <span><?php the_time('m月d日H時i分'); ?></span><br /> <?php endforeach; ?> <?php wp_reset_query(); ?>
【get_posts】と言う関数を使っています。俺はphp初心者なので解説は難しいですが、コチラのブログで凄まじく分り易く解説されています。
ht79.info:WordPressの記事取得で良く見るforeach(ループ処理)について解説
本当に理解している人が書けばこんなに分り易くなるのか…と言う見本みたいな素晴らしい記事です。
上記リンク先には書いていませんが【&paged=’.$paged】と言う因数をget_postsに書いた方が良いようです。これは現在のページ数をゲットする物らしいのですが、これが無いとページャーで次のページに行っても1ページ目の内容が表示されてしまうようです。
俺は今までメインループしか知らなかったのですが、トラブルが起きていなかったのはたまたまループ処理が重複する事をしてなかっただけみたいですね。
home.phpとその他のページで内容を変えたい場合
ループについてはこの辺にしといて、次はwebデザインで一工夫したい時に使えそうなphpです。例えば、複数のテンプレートで共用しているheader.php内の画像をhome.phpとその他のページで使い分けたい時などは、下の様にifで条件分岐させます。
<?php if (is_home()): ?> home.phpで表示させたい内容を記述 <?php else: ?> それ以外のページで表示する内容 <?php endif; ?>
home.php他、複数のページで表示内容を変えたい場合はこちら。
<?php if (is_home()): ?> home.phpで表示させたい内容を記述 <?php elseif(is_page('36')): ?> ページID:36ではこの内容を表示 <?php elseif(is_page('about')): ?> スラッグがaboutのページではこの内容を表示 <?php else: ?> それ以外のページで表示する内容 <?php endif; ?>
固定ページ毎に変えたい場合。
<?php if(is_page('36')): ?> ページID36ではこの内容を表示 <?php elseif(is_page('about')): ?> スラッグがaboutのページではこの内容を表示 <?php elseif(is_page('sitemap')): ?> スラッグがsitemapのページではこの内容を表示 <?php else: ?> それ以外のページで表示する内容 <?php endif; ?>
【if】は「もしコレならば」
【elseif】は「ifじゃないんだね。じゃあコレだったら」
【else】は「どっちでも無いならコレ」
って感じですね。
ちなみにifとelseはセミコロン(;)では無くコロン(:)で終わるので要注意。
COMMENTS:コメ無し(つд・)エーン
CATEGORY:WORDPRESSTAGS:wordpress