ワードプレス 関数の自作例

ワードプレスのメモ

自作の関数で、引数の省略の仕方などが分からなかったので、調べて練習。

get_postsのほんの一部を取り出したような内容なので実用性はゼロですが、「こういう風に書ける」という例として。

関数・呼び出し

/* ---------- 投稿があるかないか ---------- */
if( !function_exists( 'exist_article' ) ) {
	function exist_article( $post_type = 'post', $term_slug = '', $tax = '' ){
		if( $term_slug && $tax ){
			$tax_query = array(
				'taxonomy' => $tax,
				'field' => 'slug',
				'terms' => $term_slug
			);
		}
		$args = array(
			'post_type'	=> $post_type,
			'tax_query' => array( $tax_query )
		);
		$query = new WP_Query( $args );
		if( $query->have_posts() ){
			return true;
		}else{
			return false;
		}
	}
}

/* ---------- 呼び出し(標準投稿) ---------- */
if( exist_article() ){
	echo 'あるよ';
}else{
	echo 'ないよ';
}

/* ---------- 呼び出し(カスタム投稿、タームで絞り込み) ---------- */
if( exist_article( 'news', 'empty_term', 'news_cat' ) ){
	echo 'あるよ';
}else{
	echo 'ないよ';
}
バッティングしてないか

2行目:同名の関数が存在していないときだけ、関数を追加します。

関数名

3行目:exist_article

命名のルールはいくつかあるみたいだけど、基本は、「小文字単語_小文字単語」で良さそう。

1文字目の数字はNG。CSSもそうだし、とにかく「先頭に数字は使わない」で統一しておけば思考停止でいいか。

引数の初期値

3行目:$post_type = ‘post’

このように設定しておくと、呼び出しの際に引数を省略できます。

初期値設定がなく、かつ呼び出しの際に引数が足りないと、
「Too few arguments to function ~」が出ます。

条件分岐

例では単純に「引数のある/なし」で分岐しています。

いろいろな関数を作っていくと、ここが肝になるのでしょう。

動作

使うケースが多いであろう真偽にしています。

実際は?

本当によく使う関数はテンプレートタグになっているので、実際は

  • サイト独自の構造に即したもの
  • パンくずリストを出すような複雑なもの

こそ必要になってくると思いますが、とりあえず基本形の1例として。

追記

関数を削除・関数名を変更、などの場合、呼び出しコードが書いてあるとコードエディターがエラーを出します。

もちろん、エラーメッセージに従って呼び出し側を修正できるので便利ですが、

if( function_exists( 'exist_article' ) ) {
	if( exist_article( 'news', 'empty_term', 'news_cat' ) ){
		echo 'あるよ';
	}else{
		echo 'ないよ';
	}
}

このように「この関数があるなら」と前置きしてから呼び出したほうが都合がいいケースもあるかもしれません。