【WordPress】頻出記述
随時更新
テンプレートタグなど
パス
//★ホームURL
home_url()
<a href="<?php echo esc_url( home_url( '/' ) ); ?>/news/">
//★テンプレートディレクトリパス 画像パスに使用
get_template_directory_uri()
<img src="<?php echo esc_url( get_template_directory_uri() ); ?>/assets/images/xxx" alt="">
<img src="<?php echo esc_url( get_template_directory_uri() ); ?>/assets/images/common/logo.svg" alt="<?php bloginfo( 'name' ); ?>">
//★投稿のパーマリンクを表示
the_permalink()
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
//★投稿のパーマリンクを取得
esc_url( get_permalink() )
<?php the_permalink( $popular_post->id ); ?>
タイトル
//★投稿タイトルを表示
the_title()
<?php the_title(); ?>
<?php the_title( '<h1 class="page-header__title">', '</h1>' ); ?>
//★ループ外でページタイトルを出力
single_post_title()
<?php single_post_title(); ?>
//取得
get_the_title( get_queried_object_id() )
または
global $post
get_the_title( $post->ID )
//★投稿タイトルを取得
get_the_title()
//★属性用投稿タイトルを表示
the_title_attribute()
日付
//the_date()は同じ日の投稿は2投稿目以降の日付が表示されないため使用せず、get_the_date()を用いる。
// 管理画面のフォーマットが適用される
echo get_the_date()
<time datetime="<?php get_the_date( 'Y-m-d' ); ?>"><?php echo get_the_date(); ?></time>
ページ情報
//★ページ情報を取得
get_post();
//★親ページの情報を取得
$posts_data = get_post();
$posts_parent_data = get_post($posts_data->post_parent);
//★最上位の親ページの情報を取得
global $post;
$top_parent_id = $post->ancestors[ count( $post->ancestors ) - 1 ];
※親ページが無いページで Undefined offset エラーになるので if ( $post->post_parent ) {} で判定が必要
//最上位の親情報を返す関数
function my_parent_page_info( $type = 'slug' ) {
global $post;
$info = '';
if ( is_page() && $post->post_parent ) { // 親ページがある場合
// 最上位の親IDを取得
$top_parent_id = $post->ancestors[ count( $post->ancestors ) - 1 ];
$post_data = get_post( $top_parent_id );
if ( 'slug' === $type ) {
$info = $post_data->post_name;
} elseif ( 'id' === $type ) {
$info = $post_data->ID;
} elseif ( 'title' === $type ) {
$info = $post_data->post_title;
} else {
$info = $post_data;
}
}
return $info;
}
スラッグ
//★現在のページスラッグを取得
$current_slug = $post->post_name;
または $current_slug = get_post_field( 'post_name' ); でもOK ※こっちのがいいかも
カテゴリー&タグ&カスタムタクソノミー
カテゴリー(一部タグ&タクソノミーも)
//★投稿に属するカテゴリーを全部取得
<?php the_category( ', ' ); ?> //''の中は区切り文字※半角スペースにするなど
//または
$my_cat = get_the_category();
if ( ! empty( $my_cat ) ) {
echo '<p class="post-header__cat">';
foreach ( $my_cat as $c ) {
echo '<a href="' . esc_url( get_category_link( $c->term_id ) ) . '">'; //タクソノミータームの取得と共有する場合はget_term_link( $c->term_id )が良い
echo esc_html( $c->cat_name ) . ' ';
echo '</a>';
}
echo '</p>';
}
//★投稿に属するカテゴリーを1つ取得
$my_cat = get_the_category();
echo esc_url( get_category_link( $my_cat[0]->term_id ) )
<?php
$my_categories = get_the_category();
?>
<?php
if ( ! empty( $my_cat ) ) : //検索結果に固定ページが含まれる場合の処理
?>
<a href="<?php echo esc_url( get_category_link( $my_cat[0]->term_id ) ); ?>"><?php echo esc_html( $my_cat[0]->name ); ?></a>
<?php endif; ?>
//★カテゴリー一覧(サイドバーなどに)
<?php
$my_terms = get_terms(
array(
'taxonomy' => 'works-cat',
'hide_empty' => false,
)
);
if ( ! empty( $my_terms ) ) :
?>
<div class="sidebar__item">
<h3 class="sidebar__item-title">カテゴリー一覧</h3>
<ul class="aside-cat-list">
<?php
foreach ( $my_terms as $t ) :
?>
<li><a href="<?php echo esc_url( get_term_link( $t ) ); ?>"><?php echo esc_html( $t->name ); ?></a></li>
<?php
endforeach;
?>
</ul>
</div>
<?php endif; ?>
//現在のカテゴリーにis-currentを追加する
<?php
foreach ( $my_cat as $c ) :
$c_id = $c->cat_ID;
$current = is_category( $c_id ) ? ' is-current' : '';
?>
<li class="info-cat-nav__item<?php echo esc_attr( $current ); ?>">
<a href="<?php echo esc_url( get_category_link( $c->term_id ) ); ?>"><?php echo esc_html( $c->name ); ?></a>
</li>
<?php endforeach; ?>
//★特定の親カテゴリーの子一覧
$news_id = get_category_by_slug( 'news' )->term_id; //スラッグからID取得
$news_categories = get_categories(
array(
'parent' => $news_id,
'hide_empty' => false,
)
);
if ( $news_categories ) {
echo '<ul>';
foreach ( $news_categories as $category ) {
echo '<li>';
echo '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '">';
echo esc_html( $category->name );
echo '</a></li>';
}
echo '</ul>';
}
//★投稿が属する子カテゴリーのみ表示(親は表示したくない)
$categories = get_the_category();
foreach ( $categories as $category ) {
if ( $category->parent ) {
echo esc_html($category->cat_name);
}
}
//★スラッグから名前を取得
$category = get_term_by( 'slug', wp_unslash( スラッグ ), 'category' )->name;
$_tag = get_term_by( 'slug', wp_unslash( スラッグ ), 'post_tag' )->name;
//使用時はカテゴリーが存在するか判定すること(下の★スラッグからIDを取得参照)
//★スラッグからIDを取得
$catid = get_term_by( 'slug', 'topics', 'category' )->term_taxonomy_id;
//使用時はカテゴリーが存在するか判定すること
$catid = get_term_by( 'slug', 'topics', 'category' ) !== false ? get_term_by( 'slug', 'news', 'category' )->term_taxonomy_id : '';
タグ
//ループ内外どっちでも
single_tag_title()
//falseにするとでechoしなくなる(get_the_title()みたいなことになる)
echo '<h1 class="page-header__title">' . esc_html( single_tag_title( '', false ) ) . '</h1>';
//★投稿に属するタグ一覧
the_tags('<div class="xxx"><ul class="xxx" aria-label="タグ"><li>', '</li><li>', '</ul></div>');
//または
<?php
$tags = get_the_tags();
if ( ! empty( $tags ) ) :
?>
<div class="post-tags">
<?php foreach ( $tags as $t ) : ?>
<a href="<?php echo esc_url( get_tag_link( $t->term_id ) ); ?>"><?php echo esc_html( $t->name ); ?></a>
<?php endforeach; ?>
</div>
<?php endif; ?>
//★タグ一覧(サイドバーなどに)
<?php
$my_tags = get_tags(
array(
'hide_empty' => false,
)
);
if ( $my_tags ) :
?>
<?php foreach ( $my_tags as $t ) : ?>
<a class="tag" href="<?php echo esc_url( get_tag_link( $t->term_id ) ); ?>"><?php echo esc_html( $t->name ); ?></a>
<?php endforeach; ?>
<?php endif; ?>
タクソノミー
//★投稿に属ずるターム
<?php get_the_terms( $post->ID, 'results_cat' ); ?>
または
<?php
$terms = get_the_terms( $post->ID, 'results_cat' );
//複数のカスタム分類の場合は get_the_terms($post->ID, array('カスタム分類名1','カスタム分類名2'));
if ( $terms ) {
echo '<ul>';
foreach ( $terms as $t ) {
echo '<li><a href="' . esc_url( get_term_link( $t ) ) . '">' . esc_html( $t->name ) . '</a></li>';
}
echo '</ul>';
}
?>
//★ターム一覧(サイドバーなどに)
<?php
$my_terms = get_terms(
array(
'taxonomy' => 'blog-cat',
'hide_empty' => false,
)
);
if ( ! empty( $my_terms ) ) :
?>
<ul>
<?php
foreach ( $my_terms as $t ) :
?>
<li><a href="<?php echo esc_url( get_term_link( $t ) ); ?>"><?php echo esc_html( $t->name ); ?></a></li>
<?php
endforeach;
?>
</ul>
<?php endif; ?>
//現在のタームにcurrentをつける
<?php
$current_page_term_id = is_tax( 'results_cat' ) ? get_queried_object()->term_id : '';
foreach ( $my_terms as $t ) :
$t_id = $t->term_id;
$current = $current_page_term_id === $t_id ? ' current' : '';
?>
<li class="results-page-nav__item<?php echo esc_attr( $current ); ?>"><a href="<?php echo esc_url( get_term_link( $t ) ); ?>"><?php echo esc_html( $t->name ); ?></a></li>
<?php
endforeach;
?>
アーカイブページタイトル
//カテゴリー&タグその①
single_cat_title()
//※タグはsingle_tag_title()
//カテゴリー&タグその②
single_term_title();
$title = single_term_title( '', false ); //出力しない場合
//カテゴリー&タグその③
<?php the_archive_title( '<h2 class="post-header__title">', '</h2>' ); ?>
//投稿者名や日時なども表示されるので便利だが「カテゴリー:」や「タグ:」などの余計な文字列が前に追加されるので
下記関数を使用する。
function my_archive_title( $title ) {
if ( is_home() ) {
$title = '投稿一覧';
} elseif ( is_category() ) {
$title = single_cat_title( '', false );
} elseif ( is_tag() ) {
$title = single_tag_title( '', false );
} elseif ( is_tax() ) {
$title = single_term_title( '', false );
} elseif ( is_year() ) {
$title = get_the_time( 'Y年' );
} elseif ( is_month() ) {
$title = get_the_time( 'Y年n月' );
} elseif ( is_day() ) {
$title = get_the_time( 'Y年n月d日' );
} elseif ( is_author() ) {
$title = get_the_author() . 'の投稿一覧';
}
return $title;
}
add_filter( 'get_the_archive_title', 'my_archive_title' );
アイキャッチ画像
//★アイキャッチを表示
①メディアサイズで指定
the_post_thumbnail( 'thumbnail' ); //デフォルト150x150
the_post_thumbnail( 'medium' ); //デフォルト300x300
the_post_thumbnail( 'medium_large' ); //デフォルト768x(高さは制限なし)
the_post_thumbnail( 'large' ); //デフォルト1024x1024
the_post_thumbnail( 'full' );
②幅、高さで指定
the_post_thumbnail( array( 100, 100 ) ); //サイズ指定 幅 高さ
③独自の画像サイズを追加
add_image_size( 'square-400', 400, 400, true ); //after_setup_themeにて
the_post_thumbnail( 'square-400' );
④アイキャッチ画像の初期サイズを指定
set_post_thumbnail_size(1000, 500, true); //幅 高さ 切り抜く
//テンプレートへの記述
<?php if ( has_post_thumbnail() ) : ?>
<?php the_post_thumbnail( 'thumbnail' ); ?>
<?php else : ?>
<img src="<?php echo esc_url( get_template_directory_uri() ); ?>/assets/images/common/no-img.png" alt="">
<?php endif; ?>
//★アイキャッチのsrcを取得
$img_id = get_post_thumbnail_id();
$img = wp_get_attachment_image_src( $img_id, 'medium_large' );
投稿日時
//★投稿日時を表示
the_time( 'Y-m-d' )
<time datetime="<?php the_time( 'Y-m-d' ); ?>"><?php the_time( 'Y.m.d' ); ?></time>
コンテンツ&抜粋
//※the_excerpt()は抜粋が空の場合は、本文から取り出す
//★抜粋を表示
the_excerpt(); //自動で<p>タグで囲まれる
echo esc_html(get_the_excerpt()); //<p>タグで囲まない場合
the_excerpt()
if (has_excerpt()) {
the_excerpt();
}
//★投稿の本文を出力
the_content()
ユーザー情報
//★投稿者ID
get_the_author_meta( 'ID' );
//★投稿者ニックネーム
get_the_author_meta( 'user_nicename' ); //投稿者ニックネーム
//★プロフィール情報
$description = get_the_author_meta( 'user_description' ); //プロフィール情報
//★投稿者の投稿一覧へのリンク
$author_link = get_author_posts_url( $author_id );
echo wp_kses_post( wpautop( $description ) ); //wpautop で改行を反映
//★プロフィール画像をカスタムフィールド(ACF)で設定して表示する方法
$author_id = get_the_author_meta( 'ID' );
$img = get_field( 'profile_img', 'user_' . $author_id );
$imgsrc = wp_get_attachment_image_src( $img, 'thumbnail' );
<?php if ( $imgsrc ) : ?>
<figure>
<img src="<?php echo esc_url( $imgsrc[0] ); ?>" width="<?php echo esc_attr( $imgsrc[1] ); ?>" height="<?php echo esc_attr( $imgsrc[2] ); ?>" alt="<?php echo esc_attr( $author ); ?>のプロフィール画像">
</figure>
<?php endif; ?>
その他
//★テンプレートパーツをテンプレートへ読み込む
get_template_part( 'template-parts/breadcrumbs' )
検索
パラメータ―
//URLカテゴリー&タグ 絞り込み
?category_name=slug&tag=slug
<a href="<?php echo esc_url( home_url( '/' ) ); ?>?category_name=news&tag=media">関連する投稿</a>
テンプレートでURLパラメータ―を取得
isset( $_GET['post_type'] ) {
}
条件分岐タグ
投稿
カスタム投稿タイプ & タクソノミー
is_home()
is_category()
is_singular( 'post' )
is_page() && $post->post_parent 子ページ(親ページを持つか)
is_post_type_archive( '投稿タイプ名' )
is_tax( 'タクソノミー名' )
is_singular( '投稿タイプ名' )