たまに必要。
どういうアレか
WPを組むにあたって、CSSやらJSやらの読み込み設定をやっていく必要がある。
全部のページですべて読ませちゃう派なら関係ない話なのだけど。
条件分岐で該当ページに該当ファイルを読ませる中で、style.cssとか、絶対に全部に読ませるファイルが出てくる。これには条件分岐は必要ない。
だけど稀に、特設ページとかで、読ませたくない場合が出てくる。
header.phpで直接振り分けてるならまだ問題ない。
functions.phpで割り振ってwp_head()で出力してる場合、難儀する。
function add_headFiles() {
if(is_admin()) return;
if(!(is_page('***')) && !(is_page('***')) && !(is_page('***')) && !(is_page('***')) && ...):
wp_enqueue_style('commonstyle', get_template_directory_uri() .'/style.css', array());
endif;
}
add_action('wp_enqueue_scripts', 'add_headFiles');
こんな感じで都度足していきますかというと、単純に美しくないし、嫌だ。
一般的に使うものを使わないというイレギュラーをfunctions.phpで個別に指定するのはすごく気持ちが悪い。不要となったときに忘れず削除できるのか、無理だろ、という話。
管理しきれないで無駄なコードが溜まったらあとに響くばかりでよろしくない。
jsでやっていける
<link>に関して、どうやらjsで後付削除してもきちんと反映してくれるらしい。
$(function(){
if($('link#commonstyle-css').length){$('link#commonstyle-css').remove();}
})
wp_enqueue_scriptsで追加した<link>、<script>はidが振られるので問題なく対象を指定できる。
よかったですね。
ただし、所詮はjsの後付なので、一瞬元のデザインが浮上する。
良くないですね。
セッションでやっていく
例えばこう。
<?php
session_start(); // セッション開始
$_SESSION['no_commonstyle'] = true; // 保持
?>
function add_headFiles() {
if(is_admin()) return;
if(!($_SESSION['no_commonstyle'] == true)):
wp_enqueue_style('commonstyle', get_template_directory_uri() .'/style.css', array());
endif;
}
add_action('wp_enqueue_scripts', 'add_headFiles');
session_start()を省略しても動いたので、実質1行でやっていける。
現状これが最適解。
ボツ案:グローバル変数
当初の構想ではpage.phpからfunctions.phpに変数を投げて条件分岐に持っていきたかった。
でもなんか駄目っぽかった。
以前やったのはfooter.phpとかheader.phpとpage.phpの連携だったのだけど、functions.phpはやったことがなかった。やってみたら動かなかったんで、書き方がまずったのかそもそもダメなやつなのか。ともあれ却下。
ボツ案:$_POST
ページ読み込み時に$_POSTを発火させて条件分岐はどうか。GETだとURLがアレだからPOST。
formを使わない方法として、こういう記事があった。
動かなかったので却下。
まとめてきなもの
functions.phpで管理するのはファイルが分けられてスッキリして便利なんだけど、分け方のルールというか想定がしっかりしてないとイレギュラー対応ができないというか難しいというか面倒くさいというか。想定の幅を広げてイレギュラーをなくしていけるといいですね。
コメント