自作の関数で、引数の省略の仕方などが分からなかったので、調べて練習。
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 'ないよ';
}
}
このように「この関数があるなら」と前置きしてから呼び出したほうが都合がいいケースもあるかもしれません。