当サイトのリンクにはアフィリエイト広告が含まれています

PHPで条件分岐をしてJavaScript(jQuery)を実行する方法。

どうも、「JavaScriptより〜普通に〜PHPが好き〜」でお馴染みのシェフです。はじめまして。

ちょっと前に、WordPressオリジナルテーマ「4536」に、固定ヘッダーにするかどうか選択できる機能を追加したんですが、JavaScriptのファイルでPHPを使う方法がわからず困ってしまいました。

最初は、JSファイルに<?php //処理内容 ?>と記述するだけでいいのかな?なんて思っていたんですが、上手くいかず。

悩んだ結果、PHPのファイルで条件分岐して、その中でJavaScriptを実行するというシンプルな方法があることに気づいたので、今回はその方法をご紹介します。



PHPのファイルではJavaScriptを動かせる

まず、基本的な知識ですが、拡張子がPHPのファイルでJavaScriptは普通に動きます。

このようなコードですね。

<?php echo test(); ?>
<span>ここにテキストが入ります。</span>
<script>
$(function() {
 var header = $('#header'),
 $(window).scroll(function() {
 if ($(window).scrollTop() > header.height()) {
 header.addClass('reduce fixed');
 } else {
 header.removeClass('reduce fixed');
 }
 });
});
</script>

これは、PHPファイルでHTMLコードを記述できるのと同じです。特殊な記述方法なども特にありません。

ですので、JSファイルでPHPを動かしたい場合、JavaScriptの中でPHPを動かすのではなく、PHPの中でJavaScriptを動かせないか考えるのが1番簡単です。(ベースの言語がPHPの場合)

PHPで条件分岐をしてjQueryを実行

こちらが、PHPで条件分岐をしてjQueryを実行するサンプルコードです。

<?php if ( fixed_header() ) { //固定ヘッダーを有効にした場合だけ実行 ?>
<script>
$(function() {
 var header = $('#header'),
 $(window).scroll(function() {
 if ($(window).scrollTop() > header.height()) {
 header.addClass('reduce fixed');
 } else {
 header.removeClass('reduce fixed');
 }
 });
});
</script>
<?php } ?>

これで、テーマカスタマイザーの固定ヘッダー切り替えを有効にした場合だけ、PHPが実行されます。

もちろん、is_single()で記事ページだけ、!is_home()でトップページ以外のページで…といった条件分岐もできます。

そもそもJavaScriptを読み込む必要がないページもあると思うので、このように条件分岐をして軽量化すると良いかもしれません。

JavaScriptコードを別ファイルに記述すれば管理が楽

また、管理を楽にするために、ファイルを別々にするのもおすすめです。

JSファイルに記述するコード

例として、JSというフォルダの中にfixed_header.jsというファイルを作成して、下記のコードを記述します。

$(function() {
 var header = $('#header'),
 $(window).scroll(function() {
 if ($(window).scrollTop() > header.height()) {
 header.addClass('reduce fixed');
 } else {
 header.removeClass('reduce fixed');
 }
 });
});

PHPファイルに記述するコード

PHP側でやることは、このようにファイルを読み込むだけです。

if (fixed_header()) wp_enqueue_script('fixed_header',get_bloginfo('template_url') . '/js/fixed_header.js', array());

まとめ

最初は「JavaScript内でPHPの条件分岐をどうやって…」と深く考えていましたが、PHPベースで動かせばいい話だったというオチ。。笑

以上、ご参考までに!(`・ω・´)ゞ


カテゴリー:プログラミング学習

シェフ

このサイト「Fantastech」を運営している人