自分がWordPressテーマ制作時やカスタイマイズ時によく使うWordPressのテンプレートタグや条件分岐、function設定などです。自作ではありません。必要に応じてネットで調べて、自分なりに書き換えたものです。
- ヘッダーパーツ読み込み
- サイドバーパーツ読み込み
- フッターパーツ読み込み
- 任意のパーツ読み込み(sample.phpの場合)
- サイトのホームURL
- 現在表示しているページのURL
- 使用中のテーマのディレクトリパス
- ページURL取得
- ページタイトル取得
- ページコンテンツ取得
- 記事の投稿日取得
- 指定したカテゴリーのカテゴリーリストを表示(カテゴリーに親子要素がある場合)
- ページ編集リンク
- ページの文章抜粋
- カスタムフィールドの値の呼び出し
- カスタムフィールドに値がある場合のみ表示する
- コンテンツ(固定ページ)※テーマ編集で投稿記事を表示するのにも使う
- 特定のカテゴリの記事一覧
- 特定のタグの記事一覧
- 特定のカテゴリーや固定ページに表示したりしなかったり
- 指定記事で指定時間に表示させる
- 記事の昇順・降順に並べる
- 特定のカテゴリを除外・非表示
- 昇順・降順命令 → 表示記事数設定
- カテゴリーのあらゆる情報を取得
- 公開から7日以内の記事に「NEW」アイコンを表示
- 現在の表示しているカテゴリーの関連記事情報を取得して表示
- PCとスマホの表示するしない
- 記事を古い順番で表示する(カテゴリー複数指定可能)
- タイトルにカテゴリー名を追加する(カテゴリー指定)
- トップページに表示する記事一覧のカテゴリーを指定する
- カスタムフィールドの入力項目の有無を判定して表示・非表示
ヘッダーパーツ読み込み
<?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(); ?>
ページURL取得
<?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
ページ編集リンク
<?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; ?>
コンテンツ(固定ページ)※テーマ編集で投稿記事を表示するのにも使う
<?php if(have_posts()): while(have_posts()): the_post(); ?> <?php the_content(); ?> <?php endwhile; endif; ?>
特定のカテゴリの記事一覧
<?php $args = array('category'=>1,'numberposts' => 8); ?> //条件を渡して記事を取得ループ <?php $custom_posts = get_posts($args); foreach ( $custom_posts as $post ): setup_postdata($post); ?> <li> <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_post_thumbnail('home-thum'); ?><br><?php the_title(); ?></a> </li> <?php endforeach; ?>
特定のタグの記事一覧
<?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; ?>
記事を古い順番で表示する(カテゴリー複数指定可能)
function my_order_devcat( $query ) { if (is_category(array( '1','999'))) { if( $query->is_category() ) { $query->set('order', 'ASC'); $query->set( 'orderby', 'date' ); } } } add_action( 'pre_get_posts', 'my_order_devcat' );
タイトルにカテゴリー名を追加する(カテゴリー指定)
add_filter('wp_title', 'ct_title'); function ct_title($title) { if(is_single() && in_category(array(1,999))){ $temp = ''; $cat = get_the_category(); foreach($cat as $val){ $temp .= ''.$val->name.' - '; } $title = $temp . $title; return $title; } else { return $title; } }
トップページに表示する記事一覧のカテゴリーを指定する
function my_home_category( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'cat', '1,999' ); } } add_action( 'pre_get_posts', 'my_home_category' ); add_action('pre_get_posts','my_pre_get_posts_number'); function my_pre_get_posts_number( $query ) { if(is_admin() || ! $query -> is_main_query()) return; if($query->is_home()){ $query->set( 'posts_per_page',5); } }
カスタムフィールドの入力項目の有無を判定して表示・非表示
プラグイン「Custom Field Template」を使う時に使用。
<?php if(post_custom('入力項目')): ?> 入力項目に値があった場合に表示する内容 例えば入力項目がURLなら → <a href="入力項目">公式サイトはこちら</a> <?php else: ?> 入力項目に値がない場合に表示する内容 <?php endif; ?>
なお、カスタムフィールドテンプレートの呼び出しは下記。
<?php echo do_shortcode('[cft format=0]'); ?>
記事のコメント
初めまして。
phpなど全くと言っていいほど理解していませんので、お聞きしたいのですが。
これまでページごとのヘッダー画像の条件分岐で、以下のような記述をしています。
ところが今回はページのURLがhttps://xxxxxxxxxxxxx.com/archives/clay_post/clay/
となっており、ここへ画像を挿入する場合のphpの書き方がわかりません。
このページはCPT UIという投稿ページのプラグインで製作しました。
おそらくページスラッグの箇所の書き方がおかしいと思うのですが。
お忙しいところ恐れ入りますが、ご教授いただければ幸いです。
よろしくお願いいたします。
すみませんphpの箇所が消えてしまいました。
再度変えて見ます。
<?php
if ( is_front_page() ) {
get_template_part( ‘top’ );
} elseif ( is_page(‘スラッグ’) ) {
get_template_part( ‘読み込むphpファイル’ );
?>