WordPress:存在有無やサポート有無を条件指定したいときに便利なタグまとめ

WordPress:存在有無やサポート有無を条件指定したいときに便利なタグまとめ

特定の投稿タイプが存在しているか、特定のタクソノミーが存在しているか、特定の機能をテーマがサポートしているかなど、WordPressで何かしらの存在有無やサポート有無を条件として指定したいときに使えるタグをいくつか紹介します。

post_type_exists()

引数に指定した投稿タイプが存在するかのチェックを行うことができます。
例えば、「news」という投稿タイプの有無をチェックする場合は下記のように記述します。

PHP

if ( post_type_exists( 'news' ) ) {
  echo '「news」の投稿タイプが存在します。';
} else {
  echo '「news」の投稿タイプが存在しません。';
}

is_taxonomy_hierarchical()

引数に指定したタクソノミーが階層化されているかのチェックを行なうことができ、そもそもそのタクソノミーが存在しないという場合の戻り値はfalseとなります。
例えば、「投稿」にデフォルトで用意されている「category(カテゴリー)」と「post_tag(タグ)」をそれぞれ下記のようにチェックした場合は、「category」は親子関係を持てるのでtrueになりますが、親子関係を持てない「post_tag」の場合はfalseとなります。

PHP

// hierarchical check `category`.
if ( is_taxonomy_hierarchical( 'category' ) ) {
  echo '「category」のタクソノミーは階層化されています。';
} else {
  echo '「category」のタクソノミーは階層化されていません。';
}

// hierarchical check `post_tag`.
if ( is_taxonomy_hierarchical( 'post_tag' ) ) {
  echo '「post_tag」のタクソノミーは階層化されています。';
} else {
  echo '「post_tag」のタクソノミーは階層化されていません。';
}

taxonomy_exists()

引数に指定したタクソノミーが存在するかのチェックを行なうことができます。
例えば、「投稿」にデフォルトで用意されている「category(カテゴリー)」の存在有無をチェックする場合は下記のように記述します。

PHP

if ( taxonomy_exists( 'category' ) ) {
  echo '「category」のタクソノミーが存在します。';
} else {
  echo '「category」のタクソノミーが存在しません。';
}

term_exists()

引数に指定したタームが存在するかのチェックを行なうことができ、ターム名・タームID・タームスラッグのいずれかを指定します。
また、term_exists( $term, $taxonomy, $parent )となっているので、第2引数にタクソノミー名、第3引数に親のタームIDを入れることでより細かく指定することも可能です。
例えば、「投稿」にデフォルトで用意されている「category(カテゴリー)」の中に「example」というスラッグを持つタームの存在有無をチェックする場合は下記のように記述します。

PHP

if ( term_exists( 'example', 'category' ) ) {
  echo '「example」のタームが存在します。';
} else {
  echo '「example」のタームが存在しません。';
}

current_theme_supports()

引数に指定した機能がテーマでサポートされているか(add_theme_support()で機能使用が許可されているか)のチェックを行なうことができます。
例えば、テーマでアイキャッチ画像がサポートされているかを判断する場合は下記のように記述します。

PHP

if ( current_theme_supports( 'post-thumbnails' ) ) {
  echo 'アイキャッチ画像に対応しています。';
} else {
  echo 'アイキャッチ画像に対応していません。';
}

引数に記述することがあるものとしては下記のようなものがあります。

  • post-thumbnails
  • post-formats
  • custom-header
  • custom-background
  • menus
  • automatic-feed-links
  • editor-style
  • widgets
  • html5
  • title-tag

post_type_supports()

特定の機能が特定の投稿タイプでサポートされているかをチェックを行なうことができ、第1引数に投稿タイプ、第2引数に機能名をそれぞれ指定します。
例えば、「post(投稿)」で投稿フォーマットがサポートされているかを判断する場合は下記のように記述します。

PHP

if ( post_type_supports( 'post', 'post-formats' ) ) {
  echo '投稿フォーマットに対応しています。';
} else {
  echo '投稿フォーマットに対応していません。';
}

機能名として記述することがあるものとしては下記のようなものがあります。

  • title
  • editor
  • author
  • thumbnail
  • excerpt
  • trackbacks
  • custom-fields
  • comments
  • revisions
  • page-attributes
  • post-formats

has_post_thumbnail()

投稿にアイキャッチ画像が存在するかチェックすることができます。
例えば、ループ内で使用している想定でアイキャッチ画像があるならそのまま出力し、ない場合は代替画像を出すといった処理を行いたい場合は下記のように記述します。

PHP

if ( has_post_thumbnail() ) {
  the_post_thumbnail();
} else {
  echo '<img src="' . get_theme_file_uri( 'images/no-thumbnail.jpg' ) . '" alt="'  . get_the_title() . '">';
}

has_term()

投稿が指定したタームを持っているかチェックすることができ、第1引数にターム名・タームID・タームスラッグ・これらの配列のいずれかを指定し、第2引数にタクソノミーを指定します。
例えば、「投稿」にデフォルトで用意されている「category(カテゴリー)」の中に「example」というスラッグを持つタームがあり、それを持っている投稿で何か処理を行いたいという場合は下記のように記述します。

PHP

if ( has_term( 'example', 'category' ) ) {
  echo '「category」タクソノミーの「example」タームを持っています。';
}

ちなみに、単純に「投稿」の「カテゴリー」や「タグ」を持っているか調べるのであれば、has_category()has_tag()というのがあります。

username_exists()

引数に指定したユーザー名を持つユーザーが存在するかのチェックを行うことができます。
例えば、「admin」というユーザーがいるときに下記のように記述した場合は存在するという内容の文字列が出力されます。

PHP

if ( username_exists( $username ) ) {
  echo '「' . $username . '」というユーザーは存在します。';
} else {
  echo '「' . $username . '」というユーザーは存在しません。';
}

is_active_sidebar()

引数に指定したサイドバーが有効化されているかのチェックを行なうことができます。
例えば、「sidebar」というIDを持つサイドバーが有効化されているかをチェックする場合は下記のように記述します。

PHP

if ( is_active_sidebar( 'sidebar' ) ) {
  echo '「sidebar」のサイドバーが有効化されています。';
} else {
  echo '「sidebar」のサイドバーが有効化されていません。';
}

is_dynamic_sidebar()

サイドバーに有効なウィジェットが含まれているかのチェックを行うことができます。

PHP

if ( is_dynamic_sidebar() ) {
  echo '有効なウィジェットが含まれています。';
} else {
  echo '有効なウィジェットが含まれていません。';
}

is_plugin_active()

特定のプラグインが有効化されているかのチェックを行うことができます。
ただし、基本的にはis_plugin_active()が利用できるのは管理画面のみとなるので、フロントやテーマ内で使用したい場合は予めplugin.phpを読み込む必要があります。
例えば、「WP Multibyte Patch」のプラグインが有効化されているかをチェックする場合は下記のように記述します。

PHP

include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
if ( is_plugin_active( 'wp-multibyte-patch/wp-multibyte-patch.php' ) ) {
  echo '「WP Multibyte Patch」が有効化されています。';
} else {
  echo '「WP Multibyte Patch」が有効化されていません。';
}

ここで紹介してきたもの以外にも抜粋有無をチェックするhas_excerpt()や投稿フォーマットの有無をチェックするhas_post_format()など、こういった条件判定に便利な関数はまだまだあり、これらを使えるように(覚えておくように)しておくと何かと便利な場面は多いと思います。
他にどんなものがあるのか興味ある人は以下ページで確認できます。

また、条件分岐の基本的な記述方法やテンプレート・表示ページによって処理を分ける際に使えるタグについては、以下エントリーで以前紹介しているのでこちらも併せて参考にしてみてください。

Close the search window,
please press close button or esc key.