質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

635閲覧

WordPressでPHPからJSONを出力する際に、何度もechoを書きたくないです

BAKI

総合スコア11

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/07/25 21:33

編集2020/07/25 21:54

前提・実現したいこと

WordPressのwp_headを使い、PHPからJavaScriptへ、連想配列(以下「JSオブジェクト」)を出力しています。
これを美しくしたいです。

発生している問題・エラーメッセージ

JSオブジェクトでなくテキストになってしまいます。

該当のソースコード

functions.phpでwp_headを使い、次のような出力をしています。
ですが申し上げました通り、JSオブジェクトでなくテキストになってしまいます。

PHP

1add_action( 'wp_head', 'my_wp_head_defines' ); 2function my_wp_head_defines() { 3 $data1 = json_encode( ['a'=>1,'b'=>2] ); 4 $data2 = json_encode( ['c'=>1,'d'=>2] ); 5 $data3 = json_encode( ['e'=>1,'f'=>2] ); 6 echo "<script> 7 var data1 = '$data1'; 8 var data2 = '$data2'; 9 var data3 = '$data3'; 10 </script>"; 11}

試したこと

まとめてechoせず個別にしましたらテキストでなくJSオブジェクトになりましたが・・
data1、data2、data3などいろいろあるために、このようにechoを何度も書きたくありません。
狂ったようにechoを書くハメになってしまいます。

PHP

1add_action( 'wp_head', 'my_wp_head_defines2' ); 2function my_wp_head_defines2() { 3 $data1 = json_encode( ['a'=>1,'b'=>2] ); 4 $data2 = json_encode( ['c'=>1,'d'=>2] ); 5 $data3 = json_encode( ['e'=>1,'f'=>2] ); 6 echo '<script>var data1 = ' . $data1 . '</script>'; 7 echo '<script>var data2 = ' . $data2 . '</script>'; 8 echo '<script>var data3 = ' . $data3 . '</script>'; 9}

または問題の発生する該当のソースコードを使ってテキストで出力したまま、受け取ったJS側で改めてJSオブジェクトにパースする方法でも解決しますが、なおさら美しくありません。死んだ方がマシです。

いったいどうすれば、echoを何度も書いたり、改めてパースしたりなどぜず、美しく出力することができますでしょうか?

###追記
またテキストの出力もございますので、echoを何度も書く方法だと次のようになります。
統一感も欠き、美しさのかけらもございません。死んだ方がマシです。

php

1add_action( 'wp_head', 'my_wp_head_defines3' ); 2function my_wp_head_defines3() { 3 $data1 = json_encode( ['a'=>1,'b'=>2] ); 4 $ajaxurl = admin_url( 'admin-ajax.php' ); 5 6 // 以下のように統一感に欠けて大変不細工です 7 echo "<script>var ajaxurl = '$ajaxurl';</script>"; 8 echo '<script>var data1 = ' . $data1 . '</script>'; 9}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

最初のコードが意図したものにならないのは、'の使い方が適切ではないからです。
以下に、最初のコードの問題点を記したモノを記述します。

php

1<?php 2$tmp = 'test'; 3echo "a : '$tmp'"; 4echo 'a : ' . $tmp;

で、本件ですが、一般的に繰り返し処理を読みやすくするためには、繰り返し内容を関数化して外に出します。

今回であれば、変数名と値を渡すと、出力するような内容になるかと。
あとは、配列として渡して、展開する方法もありそうです。

ただ、全体が見えないので微妙なアドバイスになってる感が強いです^^;

投稿2020/07/25 21:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BAKI

2020/07/25 22:11

初歩的なことですみません。アドバイスどうもありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問