PHP コード
while ( $term = array_shift($terms) ) $_terms[] = $term->name;
get_terms() in wp-includes/taxonomy.php
タームオブジェクトの配列から必要な値(上記ではターム名)のみを配列に入れています。array_shift()
でオブジェクトを順に取得しつつ while
の条件式にしているところがカッコイイですね。カスタム投稿タイプオブジェクトを取得して slug => label
の配列を作る時などにも便利な書き方です。WordPress Coding Standards 的に大丈夫なのかな?と思いましたがセーフみたいです。
試しに速度を計測してみたところ、普通に foreach
でループさせた方が速かったです。このコはカッコだけでした、ぐぬぬ。
get_current_screen()->add_help_tab( 〜 );
in wp-admin/edit.php
オブジェクトを返す関数から直接プロパティやメソッドにアクセスします。一旦変数に代入するまでもないなら、この書き方で十分ですね。
function __construct( $manager, $id, $args = array() ) { $keys = array_keys( get_class_vars( __CLASS__ ) ); foreach ( $keys as $key ) { if ( isset( $args[ $key ] ) ) $this->$key = $args[ $key ]; }
WP_Customize_Section::__construct() in wp-includes/class-wp-customize-section.php
$args
の連想配列でオブジェクトのプロパティ値を設定します。カッコイイ。
printf( '<a href="%1$s">%3$s</a>', esc_url( get_comment_link( $comment->comment_ID ) ), get_comment_time( 'c' ), /* translators: 1: date, 2: time */ sprintf( __( '%1$s at %2$s', 'twentytwelve' ), get_comment_date(), get_comment_time() ) );
in wp-content/themes/twentytwelve/functions.php
PHP の値と HTML をあわせて出力するときは、<?php
?>
で HTML/PHP を切り替えたり、echo
で文字列と値を連結するケースが多いですが、いずれも見難いコードになってしまいます。printf/sprintf
を使えば、一気に見やすくメンテナンスしやすいコードになりますよ。
/* translators: If there are characters in your language that are not supported by Open Sans, translate this to 'off'. Do not translate into your own language. */ if ( 'off' !== _x( 'on', 'Open Sans font: on or off', 'twentytwelve' ) ) {
in wp-content/themes/twentytwelve/functions.php
メッセージカタログ(po/mo ファイル)の記述を config 的な設定値として利用しています。カッコよすぎてシビレますね…
WordPress の便利関数
WordPress には気の利いた便利でマイナーな関数がたくさんあります。ここではさりげなく使うとカッコイイ関数をいくつか紹介します。
フィルターにお決まりの値を返す
フィルターフックで false
array()
などありがちな値を返す場合、自分でわざわざフック用の関数を作らなくても既に WordPress に用意されています。
__return_true() __return_false() __return_zero() __return_empty_array() __return_null()
in wp-includes/functions.php
使い方は以下のとおり。シンプルでカッコイイですね。
add_filter( 'filter_name', '__return_true' );
日時関連
current_time( $type, $gmt = 0 )
current_time() in wp-includes/functions.php
PHP の time()
や date()
を使って「9時間ずれてるー!」となった経験は誰しもあると思います。これは管理画面の一般設定「タイムゾーン」で指定した現在日時を取得できる関数です。date_i18n()
も内部でこの関数を使っています。
- 参考:関数によって取得される現在日時の違い
-
time() 1733075256 current_time( ‘timestamp’ ) 1733107656 date( ‘Y-m-d H:i:s’ ) 2024-12-01 17:47:36 current_time( ‘mysql’ ) 2024-12-02 02:47:36
$gmt
を true
にすると Unix タイムスタンプになります。
human_time_diff( $from, $to = '' )
human_time_diff() in wp-includes/formatting.php
引数に日時を与えると「5分(前)」「2時間(前)」「3日(前)」などの期間表示を返します。管理画面の記事一覧ページの「日時」カラムで使用されていますね。なんと WP 1.5 の時代からあるみたいです。Twitter にインスパイアされたのかと思ってました。
フォーム関連
checked( $checked, $current = true, $echo = true ) selected( $selected, $current = true, $echo = true ) disabled( $disabled, $current = true, $echo = true )
checked(), selected(), disabled() in wp-includes/general-template.php
input
要素などの属性値を簡単に出力できます。if
や三項演算子で見難くなりがちなコードをこれらの関数でスッキリ書けます。地味に便利ですね。
absint( $maybeint )
absint() in wp-includes/functions.php
引数の整数の絶対値を返します。PHP の関数だと思ってました… サニタイズ時に使うと intval()
より厳密な感じがしますね。
ベタ書き防止
文字列連結などをベタ書きするより「何をしているのか」を明示する関数を使う方がセマンティックで思慮深そうに見えます。
trailingslashit( $string )
trailingslashit() in wp-includes/formatting.php
$string
の最後にスラッシュが付いていてもいなくても、確実に1つだけスラッシュを付けます。安易に . '/'
とすると string//
となることがあるのでこの関数を使いましょう。関数名が長いのは気にしないでください…
path_join( $base, $path )
in wp-includes/functions.php
rtrim($base, '/') . '/' . ltrim($path, '/')
を返します。パスの連結をベタ書きするよりスマートですね。
zeroise( $number, $threshold )
zeroise() in wp-includes/formatting.php
指定した桁数になるよう数字の前に0をパディングします。0詰めをベタ書きするよりクレバーですね。
カッコイイ関数
関数そのものがカッコイイですよ。
wp_filter_object_list( $list, $args = array(), $operator = 'and', $field = false )
wp_filter_object_list() in wp-includes/functions.php
オブジェクト配列の中から、条件に合うオブジェクトを抽出します。get_post_types()
の内部でも使われていますね。これを使っているとすごい人に見えます。
セマンティックな定数
define( 'MINUTE_IN_SECONDS', 60 ); define( 'HOUR_IN_SECONDS', 60 * MINUTE_IN_SECONDS ); define( 'DAY_IN_SECONDS' , 24 * HOUR_IN_SECONDS ); define( 'WEEK_IN_SECONDS', 7 * DAY_IN_SECONDS ); define( 'YEAR_IN_SECONDS', 365 * DAY_IN_SECONDS );
in wp-includes/default-constants.php
1日を秒数で指定するときは 60 * 60 * 24
より DAY_IN_SECONDS
の方がわかりやすくてカッコイイですね。
デバッグに使えるコード
WordPress コアファイルではありませんが、Debug Bar, Debug-Bar-Extender などのデバッグ用プラグインを使いこなしているとカッコイイですね。
Debug_Bar_Extender::instance()->trace_var( $value, $var_name = false )
変数の値を <pre /> 付き var_dump()
で確認できます。var_dump()
の代替以上の使い勝手ですよ。実際に使う場合は、プラグインが停止されていてもエラーにならないように if ( class_exists( 'Debug_Bar_Extender' ) )
で判定をしましょう。
番外編
使いどころがわからない関数や不要かもしれない関数も結構あります。カッコよくないかもしれないので注意してください。
is_new_day()
is_new_day() in wp-includes/functions.php
一覧表示時(ループ中)に記事の公開日付が変わったかどうかを判定するようですが、どこからも使われていません。ちなみに the_date()
内部で関連するグローバル変数を操作していて、そこで new day 判定も直接しています。何故 is_new_day()
を使わない…
まとめ
これらの他にも antispambot()
size_format()
ファイル操作関数など、個人的には使う機会がないですが、いざ必要となったときにあると便利な関数やコードのヒントが WordPress にはたくさんあります。ソースや Codex を眺めていると新たな発見があるかもしれませんよ。以上、全然まとめきれていませんがこの辺りで失礼します。
ではまた。