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

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

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

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

PHP

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

Q&A

1回答

284閲覧

配列が全て出力されてしまう

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/07/30 19:07

編集2018/07/30 19:21

チェックした項目だけ出力したいのに、配列の中身が全て出力されてしまいます。
問題のコードです↓

php

1$ar = ['a','b','c']; 2//同様に「d、e、f、、、」と100個ある 3foreach($ar as $tmp){ 4 echo '<li>'.get_post_meta(bbp_get_topic_id(), $tmp, true).'</li>'; 5}

上のようにechoすると、たとえばチェックした「a」という1個が<li>a</li>と出力されるのは良いとして、それ以外の「b、c、d、e、f、g、、」というチェックしてない<li></li>が空っぽで99個出力されてしまうのです。

上記のコードはワードプレスのfunctions.phpで下記のように書いて作り、チェックボックスはここから表示されチェックの有無が登録されます。

php

1add_action ( 'bbp_theme_before_topic_form_content', 'bbp_extra_fields'); 2function bbp_extra_fields() { 3 4 $html = ""; 5 $html .= '<input type="checkbox" name="a" value="a">a'; 6 $html .= '<input type="checkbox" name="b" value="b">b'; 7 $html .= '<input type="checkbox" name="c" value="c">c'; 8 //同様に「d、e、f、、、」と100個ある 9 10 echo $html; 11} 12 13add_action ( 'bbp_new_topic', 'bbp_save_extra_fields', 10, 1 ); 14add_action ( 'bbp_edit_topic', 'bbp_save_extra_fields', 10, 1 ); 15function bbp_save_extra_fields($topic_id = 0) { 16 17 if (isset($_POST) && $_POST['a']!='') { 18 update_post_meta( $topic_id, 'a', $_POST['a'] ); 19 } 20 if (isset($_POST) && $_POST['b']!='') { 21 update_post_meta( $topic_id, 'b', $_POST['b'] ); 22 } 23 if (isset($_POST) && $_POST['c']!='') { 24 update_post_meta( $topic_id, 'c', $_POST['c'] ); 25 } 26 //同様に「d、e、f、、、」と100個ある 27 28}

どうしたらチェックした項目の<li></li>だけ出力させることができるのでしょうか?

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

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

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

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

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

guest

回答1

0

公式リファレンス[関数リファレンス/get post meta]によると

もしも関数が返す値がなかった場合、空の配列を返します。$single が true に設定されていた場合、空の文字列を返します。

とのことなので、そのまま利用するのではなく、空文字チェックをしてから入れられては?

※WordPress環境が手元にないので未検証

php

1foreach($ar as $tmp){ 2 $getid = get_post_meta(bbp_get_topic_id(), $tmp, true); 3 if($getid !== ""){ 4 echo '<li>'.$getid.'</li>'; 5 } 6} 7

投稿2018/07/30 21:27

m.ts10806

総合スコア80850

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

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

退会済みユーザー

退会済みユーザー

2018/07/30 23:24

ありがとうございます。ご提示のコードでできました。 さきほど分からないなりにテキトーに、次のように書いてもできました。 foreach($ar as $tmp){ $getid = get_post_meta(bbp_get_topic_id(), $tmp, false); foreach ($getid as $postid ) { echo '<li>'.$postid.'</li>'; } } このテキトーなものとご提示のものとでは、それぞれどのような違いがあるのでしょうか?
m.ts10806

2018/07/30 23:52

公式リファレンスの第3引数の仕様を確認してください。
m.ts10806

2018/07/30 23:53 編集

というかkey1件なのでforeach重ねる意味ないですね。
m.ts10806

2018/07/31 00:01

"公式リファレンスの"第3引数の仕様を確認してください。
退会済みユーザー

退会済みユーザー

2018/07/31 00:10

ありがとうございました。
m.ts10806

2018/07/31 00:41

上記記事で分からなかったことは何でしょうか。「よくわからない」だけでは分かりません。 WordPressは知らない私でも公式リファレンスと併せて読むと理解はできたのですが。
m.ts10806

2018/07/31 00:46

色々な位置にget_post_meta()を入れて取得できる値をvar_dump()で確かめてみると理解が深まるかもしれません。
m.ts10806

2018/07/31 12:28

ああ、そういう・・・。同一人物による複数アカウント所持 本当なら規約違反でアウトですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問