自分がWordPressテーマ制作時やカスタイマイズ時によく使うWordPressのテンプレートタグと条件分岐です。様々な場面で使用するので、リストにして管理しておくと作業がはかどりますよ。
良く使うWordPressのテンプレートタグ
ヘッダーパーツ読み込み
<?php get_header(); ?>
サイドバーパーツ読み込み
<?php get_sidebar(); ?>
フッターパーツ読み込み
<?php get_footer(); ?>
任意のパーツ読み込み(sample.phpの場合)
<?php get_template_part('sample'); ?>
サイトのホームURL
<?php echo home_url(); ?>
現在表示しているページのURL
<?php echo the_permalink();?>
使用テーマディレクトリへのパス
<?php echo get_template_directory_uri(); ?>
該当する記事リンク
<?php the_permalink(); ?>
該当するタイトル
<?php the_title(); ?>
該当するコンテンツ(記事)
<?php the_content(); ?>
該当する投稿日
<?php the_time('Y年n月j日'); ?>
<?php the_time('Y.m.d'); ?>
※「Y」大文字 → 「2014」、「y」小文字 → 「14」
※設定、一般、日付のフォーマットも関係
指定したカテゴリーのカテゴリーリストを表示(カテゴリーに親子要素がある場合)
<ul><?php wp_list_categories("title_li=&child_of=1"); ?></ul>
親、子の要素があるカテゴリーに使用。
その他に様々な取得値があり、「&」を使ってカスタマイズ可能
参照リンク:
テンプレートタグ/wp list categories
テンプレートタグ/wp list categories
ページ編集リンク
<?php edit_post_link('このページを編集する', '', ''); ?>
WordPressにログイン時だけに表示される
該当記事の文章抜粋
<?php the_excerpt(); ?>
「function.php」に下記追加で表示する文字数も調整可
function new_excerpt_mblength($length) { return 100; } add_filter('excerpt_mblength', 'new_excerpt_mblength');
カスタムフィールドの値の呼び出し
<?php echo get_post_meta($post->ID, 'カスタムフィールドの名前', true); ?>
カスタムフィールドに値がある場合のみ表示する
<?php if(post_custom('任意の値')): ?> <?php echo post_custom('任意の値'); ?> <?php endif; ?>
良く使うWordPressの条件分岐
コンテンツ(固定ページ)※テーマ編集で投稿記事を表示するのにも使う
<?php if(have_posts()): while(have_posts()): the_post(); ?> <?php the_content(); ?> <?php endwhile; endif; ?>
特定のカテゴリの記事一覧
<?php $posts = get_posts('numberposts=100&category=5'); global $post; ?> <?php if($posts): foreach($posts as $post): setup_postdata($post); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endforeach; endif; ?>
特定のタグの記事一覧
<?php if(has_tag('タグA')) : ?> <section> <h2>タグAに関連する記事</h2> <ul class="kanren_list"> <?php $my_query = new WP_Query('tag_id=999'); ?> <?php while ($my_query->have_posts()) : $my_query->the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> <?php wp_reset_query(); ?> </ul> </section> <?php endif; ?>
特定のカテゴリーや固定ページに表示したりしなかったり
<?php if(is_home()): ?> <img src="<?php bloginfo('template_url'); ?>/images/gra_main.jpg" width="960" height="300" alt="" /> <?php else: ?> <img src="<?php bloginfo('template_url'); ?>/images/gra_news.jpg" width="960" height="70" alt="" /> <?php endif; ?>
※if(is_home()を変えれば他にも流用できる
※endif;で「 else:(それ以外は)」を省ける
固定ページやカテゴリーなどの条件分岐で使えるもの
- is_home() → ホーム
- is_front_page() → フロントページ
- is_single() → 投稿記事(全て)
- is_single(3) → 投稿記事(特定)
- is_single(array(3,10,259)) → 投稿記事(複数)
- is_page() → 固定ページ(全て)
- is_page(42) → 固定ページ(特定)
- is_page(array(42,54,6)) → 固定ページ(複数)
- in_category() → カテゴリー(コンテンツの表示非表示はこっち)
- in_category(9) → カテゴリー(特定)
- !in_category(9) → カテゴリー(特定除外)
- in_category(array(1,2,3,4,5)) → カテゴリー(複数)
- !in_category(array(1,2,3,4,5)) → カテゴリー(複数除外)
- is_category() → カテゴリー(リストの取得関連はこっち全て)
- is_category(9) → カテゴリー(特定)
- is_category(array(1,2,3)) → カテゴリー(複数)
- !is_category(array(4,5,6)) → カテゴリー(複数除外)
- is_category(‘blue-cheese’) → カテゴリースラッグ
- is_tag() → タグを表示
- is_tag(‘aaa’) → aaaタグの表示
- is_tag(array(‘sharp’,’mild’,’extreme’)) → 複数のタグの表示
- has_tag(‘aaa’) → aaaタグに限定
- is_author(4) → 作成者
- is_search() → 検索結果ページ
- is_404() → 404ページ
- is_day() → 日にちアーカイブ
- is_month() → 月アーカイブ
- is_year() → 年アーカイブ
※is_category()とin_category()の違い
複数の条件分岐を設置する
PHPの条件分岐の「elseif」を使って複数の分岐を作る。
<?php if(in_category(array(1,2,3))): ?> カテゴリーIDが1、2、3の時に表示する <?php elseif(in_category(array(4,5,6))): ?> カテゴリーIDが4、5、6の時に表示する <?php elseif(in_category(array(7,8,9))): ?> カテゴリーIDが7、8、9の時に表示する <?php endif; ?>
複数条件に合うものだけ表示させる
「A かつ B」のように複数の条件を満たす場合のみ表示させる論理演算子。
<?php if (in_category(1) && has_tag('テスト')) : ?> カテゴリー1でタグに「テスト」が含まれる場合のみ表示 <?php endif; ?>
複数条件のうちどれかに合うものだけ表示させる
「A か B」のように複数条件のうちどれかに合うものだけ表示させる論理演算子。
<?php if (in_category(1) || has_tag('テスト')) : ?> カテゴリー1かタグに「テスト」が含まれる場合のみ表示 <?php endif; ?>
URL(パーマリンク)で条件分岐させる
<?php $url = $_SERVER['REQUEST_URI']; ?> <?php if(strstr($url,'sample')==true): ?> <?php elseif(strstr($url,'test')==true): ?> <?php else: ?> URLにsampleとtestが含まれていない場合にココが表示される <?php endif; ?>
指定記事で指定時間に表示させる
<?php if (is_single(53) && date_i18n('Y-m-d H:i') >= '2018-12-27 15:05'): ?> <p>2018-12-27 14:51~表示する内容</p> <?php endif; ?>
デフォルトは9時間ズレなので「date_i18n」で日本時間を取得。
でもWordPressの設定が6分早いから「2018-12-27 14:51」に表示された。
記事の昇順・降順に並べる
<ul class="newslist"> <?php query_posts($query_string .'&order=desc'); ?> <?php query_posts('posts_per_page=5'); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <li><span class="date"><?php the_time('Y.n.j'); ?></span> <a href="<?php the_permalink(); ?>" title="<?php the_title();?>"><?php the_title();?></a></li> <?php endwhile; endif; ?> <?php wp_reset_query(); ?> </ul>
昇順・降順命令 → リスト取得
<?php query_posts($query_string .'&order=asc'); ?> <?php if(have_posts()): while(have_posts()): the_post(); ?>
※昇順:asc
※降順:desc
特定のカテゴリを除外・非表示
<?php query_posts($query_string . '&cat=-5'); ?>
※ID・スラッグ名の前に「-」マイナスを付ける
昇順・降順命令 → 表示記事数設定
<?php query_posts($query_string .'&order=desc'); ?> <?php query_posts('posts_per_page=5'); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
※表示記事数設定 → 昇順・降順命令 だと表示記事数設定が無効
カテゴリーのあらゆる情報を取得
<?php $cat = get_the_category(); $cat = $cat[0]; ?> <div class="<?php echo $cat->category_nicename; ?>">
※class名がカテゴリースラッグになる
※取得されたものに投稿によってスタイルを変えられる
画像にも応用できる
<img src="<?php echo get_template_directory_uri(); ?>/img/topics_icon_<?php echo $cat->category_nicename; ?>.gif" alt="<?php echo $cat->cat_name; ?>" />
※各カテゴリーに該当する画像を用意して1部分をスラッグ名で区別して、そこを差し替える
※altはカテゴリー名を取得
取得できる情報
- cat_ID → 記事のカテゴリーID
- cat_name → 記事のカテゴリー名
- category_nicename → 記事カテゴリーのカテゴリースラッグ
- category_description → 記事のカテゴリー説明文
- category_parent → 記事の親カテゴリーにあたるカテゴリーのID
- category_count → カテゴリーが使われている回数
公開から7日以内の記事に「NEW」アイコンを表示
<?php // アイコン出力 $days = 7; $today = date('U'); $entry = get_the_time('U'); $sa = date('U',($today - $entry))/86400; if( $days > $sa ){ echo "<span class="new">New</span>"; } ?>
現在の表示しているカテゴリーの関連記事情報を取得して表示
<?php $categories = get_the_category($post->ID); $category_ID = array(); foreach($categories as $category): array_push( $category_ID, $category -> cat_ID); endforeach ; $args = array( 'posts_per_page'=> 0, //表示する記事数 'category__in' => $category_ID, ); $st_query = new WP_Query($args); ?> <?php if( $st_query -> have_posts() ): ?> <?php while ($st_query -> have_posts()) : $st_query -> the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> <?php else: ?> <p>関連記事は現在ありません。</p> <?php endif; wp_reset_postdata(); ?> </ul> <?php endif; ?>
PCとスマホの表示するしない
<?php if ( wp_is_mobile() ) : ?> // モバイル用コンテンツ <?php else: ?> // PC用コンテンツ <?php endif; ?>
コメント