BOOK Studio947
狩野祐東・狩野さやか著書

WordPressデザインレシピ集の193につきまして

書籍Q&ACategory: WordPressデザインレシピ集WordPressデザインレシピ集の193につきまして
gaugau asked 4年 ago

はじめまして。
当該書籍を購入し、WordPressの勉強をしてます。
過去の質問を探したのですが、同様の質問が無いようなので質問します、ご容赦ください。
タイトルの通り、当該書籍の「193」の部分です。
・テンプレートコンテンツで「default=nosmoking」としているのに、ホテルの個別投稿画面ではnosmokingにチェックが入らない(自分でチェックをつけないといけない)
・チェックボックスに一つだけチェックが入っていると、エラーのような表示になる(2つ以上チェックが入っていれば問題なく表示される)
これらは何故こうなるのでしょうか。
何が問題なのでしょうか。
解決方法はあるのでしょうか。
お手数おかけし大変申し訳ございませんが、ご回答頂ければ幸いです。
 
以上宜しくお願い致します。

1 Answers
狩野 祐東 Staff answered 4年 ago

ご質問ありがとうございます。2点、回答いたします。

テンプレートコンテンツで「default=nosmoking」としているのに、ホテルの個別投稿画面ではnosmokingにチェックが入らない(自分でチェックをつけないといけない)

デフォルト値を設定しているのに、新規投稿時にその項目にチェックがつかない場合は、[読込]ボタンがある行の右側の[初期化]ボタンをクリックしてみてください。

チェックボックスに一つだけチェックが入っていると、エラーのような表示になる(2つ以上チェックが入っていれば問題なく表示される)

大変失礼いたしました。プログラムコードの誤りです。partials/hotelinfo.phpの10行目(サンプル193)の部分、

$post_custom = post_custom('facility');

を、

$post_custom = get_post_meta(get_the_ID(), 'facility');

に書き換えてみてください。

書き換えたコードの解説しておくと、post_custom()関数は、()内で指定されたカスタムフィールドの値がひとつしかない場合──このサンプルでいえば、「nosmoking(禁煙、デフォルト値)」にだけチェックがついている場合──に、そのカスタムフィールドに設定された値の文字列を返します。その結果変数$post_customには文字列が代入されるため、次の行のforeach()が正しく動作しません。

上記のように直してget_post_meta()関数で値を取得すると、チェックがついているのが1個でも0個でも、常に配列で返されるようになり、foreach()が正しく動作するようになります。