WordPressテンプレート中で現在のテンプレートパート名を取得する

function current_template_part($determine=NULL) {
 $o = debug_backtrace();
 $path = NULL;
 foreach ($o as $i=>$r) {
  if ( isset($r['function']) ) {
   if ( ( $r['function'] == 'load_template' ||  $r['function'] == 'include') && isset($r['args']) && is_array($r['args']) && isset($r['args'][0]) && is_string($r['args'][0]) ) { $path = $r['args'][0]; break; }
  }
 }
 if ($path) {
  if ( preg_match('/(.*?)\x2ephp$/', basename($path), $m ) ) {
   $t = $m[1];
   if ($determine) {
    if ($determine == $t) return $t;
    else return FALSE;
   }
   return $t;
  }
 }
 return FALSE
 ;
}

WordPressで「現在実行中(include中)のテンプレートパート名」(sidebar.phpとかfooter.phpとか)が知りたくて調べていたのですが、適当な機能がいっこうにみつからなかったので書いてみました。
「サイドバーの中なら」とか「フッターの中だったら」とか、条件設定したい場面はけっこうあると思うのですが、なぜこの機能がないのか謎です。
とりあえず子テーマとかは考えてません。

Leave a Reply