WordPress のループでよく使う項目をまとめてみた


WordPress の テーマ作成の際にループ内で使う項目を、必要な部分だけ抜き出して使えるように、まとめてみました。

ループ内
if ( have_posts() ) {
    while ( have_posts() ) {
        the_post();
        // ここで使う
    }
}
投稿ID $post_id = get_the_ID();
投稿タイプ $post_type = get_post_type();
投稿タイトル $post_title = esc_attr( apply_filters( 'the_title', get_the_title() ) );
出力用の整形やプラグインの挙動追加のためにapply_filters( 'the_title', $value )を使用。
プラグインの挙動によりHTML属性値に適さない恐れがあるのでesc_attr( $value )でエスケープ。
投稿日時 $post_date = get_the_time('Y年m月d日H時i分');
get_the_date()だと、同一公開日の二つ目以降で取得できないので、get_the_time()を使用。
更新日時 $modified_date = get_the_modified_date('Y年m月d日H時i分');
投稿者名(ブログ上の表示名) $auther_name = esc_attr( get_the_author() );
HTML属性値に適さない恐れがあるのでesc_attr( $value )でエスケープ。
投稿者ID $auther_id = get_the_author_meta('ID');
投稿者のアバター画像出力用HTML $auther_avatar = get_avatar( get_the_author_meta('ID'), 96 );
96は、画像サイズ。デフォルトで96、最大512
アバター画像を取得できればimg要素の文字列、取得できなければfalseを返す。
投稿者別アーカイブページのURL $auther_posts_url = get_author_posts_url( get_the_author_meta('ID') );
$display_auther_posts_url = esc_url( urldecode( $auther_posts_url ) );
$auther_posts_url = esc_url( $auther_posts_url );
はじめに取得した値はURLエンティティされていて難読的なため、urldecode( $value )で可読化。
初期値・可読化値の共に、HTMLのhref属性値に適さない恐れがあるのでesc_url( $value )でエスケープ。
記事のURL $permalink = apply_filters( 'the_permalink', get_permalink() );
$display_permalink = esc_url( urldecode( $permalink ) );
$permalink = esc_url( $permalink );
出力用の整形やプラグインの挙動追加のためにapply_filters( 'the_permalink', $value )を使用。
はじめに取得した値はURLエンティティされていて難読的なため、urldecode( $value )で可読化。
可読化値は、HTMLのhref属性値に適さない恐れがあるのでesc_url( $value )でエスケープ。
初期値も、プラグインの挙動などによりHTMLのhref属性値に適さない恐れがあるのでesc_url( $value )でエスケープ。
アイキャッチ画像の情報 $thumb_size = 'full';
$thumb_id = get_post_thumbnail_id();
$thumb_obj = wp_get_attachment_image_src( $thumb_id, $thumb_size, true );
$thumb_url = ( $thumb_obj ) ? $thumb_obj[0] : '';
$thumb_width = ( $thumb_obj ) ? $thumb_obj[1] : '';
$thumb_height = ( $thumb_obj ) ? $thumb_obj[2] : '';
画像のサイズは、元サイズの'full'と、
「管理画面-設定-メディア」で管理されている'thumbnail','medium','large'のほか、
add_image_size()関数で追加されたサイズ名を使用可能。
アイキャッチ画像が設定されているかでの処理の分岐は、
if ( has_post_thumbnail() ) { ... } else { ... }で行える。
カテゴリー
タグ
タクソノミー
$category_terms = get_the_term_list( $post->ID, 'category', '', ',', '' );
$tag_terms = get_the_term_list( $post->ID, 'post_tag', '', ',', '' );
$custom_terms = get_the_term_list( $post->ID, 'custom_taxonomy_name', '', ',', '' );
ターム別アーカイブページへのリンク付きターム一覧表示用HTML文字列を取得。
引数:投稿ID, タクソノミー名, 前につく文字列, 間に入れる文字列, 後ろにつける文字列。
例)echo get_the_term_list( $post->ID, 'category', '<ul><li>', ',</li><li>', '</li></ul>' );
投稿記事の要約文 $excerpt = apply_filters( 'the_excerpt', get_the_excerpt() );
$excerpt = strip_tags( $excerpt );
出力用の整形やプラグインの挙動追加のためにapply_filters( 'the_excerpt', $value )を使用。
apply_filters( 'the_excerpt', $value )を使用すると、
pタグで囲まれている状態(<p>excerpt text...</p>)になるため、 strip_tags()でHTMLタグを除去してテキストのみ抽出。
投稿記事の本文 $content = apply_filters( 'the_content', get_the_content() );
$content = str_replace( ']]>', ']]>', $content );;
出力用の整形やプラグインの挙動追加のためにapply_filters( 'the_content', $value )を使用。
CDATAセクション内で値を使用できるようstr_replace( ']]>', ']]>', $value )で、CDATAブロックの閉じタグを無効化。

投稿に関連づけられたタクソノミーとタームを全て表示する場合は、
get_object_taxonomies()と、get_the_terms(),get_term_link()で取得して整形。

ループ外
WebサイトのURL $home_url = esc_url( home_url() );
取得した値の後ろにスラッシュ(/)はつかない。
例)http://www.example.net
HTMLのhref属性値に適さない恐れがあるのでesc_url( $value )でエスケープ。
WordPress本体の
インストールディレクトリURL
$site_url = esc_url( site_url() );
取得した値の後ろにスラッシュ(/)はつかない。
例)http://www.example.net/wordpress
HTMLのhref属性値に適さない恐れがあるのでesc_url( $value )でエスケープ。
Webサイトの名前 $site_name = esc_attr( get_bloginfo('name') );
「管理画面-一般設定」の「サイトのタイトル」で設定された値。
HTML属性値に適さない恐れがあるのでesc_attr( $value )でエスケープ。
Webサイトのキャッチフレーズ $site_description = esc_attr( get_bloginfo('description') );
「管理画面-一般設定」の「キャッチフレーズ」で設定された値。
HTML属性値に適さない恐れがあるのでesc_attr( $value )でエスケープ。
サイト管理者のメールアドレス $site_admin_email = get_bloginfo('admin_email');
「管理画面-一般設定」の「メールアドレス」で設定された値。
HTML属性値に適さなくなる恐れがあるのでエスケープ処理は行わない。
テーマファイルのディレクトリURI $theme_url = esc_url( get_template_directory_uri() );
取得した値の後ろにスラッシュ(/)はつかない。
例)http://www.example.net/wp-content/themes/twentysixteen
HTMLのhref属性値に適さない恐れがあるのでesc_url( $value )でエスケープ。
子テーマから呼ぶ場合は、親テーマのディレクトリURIを返す。
子テーマファイルのディレクトリURI $child_theme_url = esc_url( get_stylesheet_directory_uri() );
取得した値の後ろにスラッシュ(/)はつかない。
例)http://www.example.net/wp-content/themes/customtwentysixteen
HTMLのhref属性値に適さない恐れがあるのでesc_url( $value )でエスケープ。
有効化された子テーマがある場合は、子テーマのディレクトリURIを返す。
有効化された子テーマがない場合は、有効化されているテーマのディレクトリURIを返す。

ページネーション