あくまで自分用の覚え書きなので文章とか適当です...

随時更新

テンプレートタグなど

パス

//★ホーム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( '投稿タイプ名' )
スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です