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

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

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

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

PHP

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

解決済

WordPressの「update_post_meta」が、複数チェックボックスに対して機能しないケース

waru
waru

総合スコア16

WordPress

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

PHP

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

1回答

0リアクション

0クリップ

643閲覧

投稿2019/02/26 06:13

編集2019/02/27 02:13

###実現したいこと・問題点

WordPressでカスタムフィールドにチェックをしたいです。

下記のようにupdate_post_metaに配列を使っても1つもチェックされないという問題が発生しました。

PHPエラーはありません。

###該当のソースコード
こちらが問題のコードです。

php

$check_get = esc_html( $_POST['check_get'] ); // check1,check2 が入ります $check_arr = explode(",", $check_get); // それを配列にします update_post_meta($id, 'checkbox', $check_arr); // チェックできません

$check_get には間違いなく check1,check2 が入っていますが、下記のようにチェックがされません。

イメージ説明

尚、$check_arr$のように配列で渡すという方法はこちらを参考にしたのですが、間違っていますでしょうか?(https://stackoverflow.com/questions/22660822/how-to-save-multiple-checkbox-on-update-post-meta-in-wordpress

###foreachだと1つだけチェックできる
ちなみに下記のようにforeachを使うと、check2 だけにチェックが入ります

php

$check_get = esc_html( $_POST['check_get'] ); // check1,check2 が入ります $check_arr = explode(",", $check_get); // それを配列にします foreach ($check_arr as $check) { update_post_meta($id, 'checkbox', $check); // check2 だけにチェックが入ります }

下図のようになります。
イメージ説明

###ラジオボタンはできる
あとラジオボタンだとできます。

php

$radio_get = esc_html( $_POST['radio_get'] ); $radio_add = $radio_get == '' ? 'radio1' : $radio_get; update_post_meta($id, 'radiobox', $radio_add); // チェックできます

1つもチェックしなければ下記のようにradio1にチェックがきちんと入りますし、もしradio2にチェックすれば同様に機能します。
イメージ説明

###まとめ
どうすればチェックできるようになるか、原因や対策などを知りたいと思い質問させて頂きました。
どうぞ宜しくお願い致します。

###追記(m6u様へ)
m6u様からの追記依頼の件です。
チェックボックスを表示している箇所(上記の画像1枚目の箇所)の、webブラウザ上でのhtmlソースになります。

html

<div id="checkbox" class="postbox "> <button type="button" class="handlediv" aria-expanded="true"> <span class="screen-reader-text">パネルを閉じる: checkbox</span> <span class="toggle-indicator" aria-hidden="true"></span> </button> <h2 class="hndle ui-sortable-handle"><span>checkbox</span></h2> <div class="inside"> <input type="hidden" id="nonce-checkbox" name="nonce-checkbox" value="1859407a37"> <input type="hidden" name="_wp_http_referer" value="/wp-admin/post.php?post=47&amp;action=edit"> <label><input style="" type="checkbox" name="checkbox" value="check1">check1</label> <label><input style="" type="checkbox" name="checkbox" value="check2">check2</label> </div> </div>

###追記(CHERRY様へ)
CHERRY様からの追記依頼の件です。
カスタムフィールドを定義している部分のコードになります。

php

add_action( 'admin_menu', 'add_meta_field' ); function add_meta_field() { add_meta_box( 'checkbox', 'checkbox', 'create_checkbox', 'custom', 'side' ); } function create_checkbox() { $keyname = 'checkbox'; global $post; $get_value = get_post_meta( $post->ID, $keyname, true ); $data = ['check1', 'check2']; wp_nonce_field( 'action-' . $keyname, 'nonce-' . $keyname ); foreach( $data as $d ) { $checked = ''; if( $d === $get_value ) $checked = ' checked'; echo '<label><input style="" type="checkbox" name="' . $keyname . '" value="' . $d . '"' . $checked . '>' . $d . '</label>'; } } add_action( 'save_post', 'save_meta_field' ); function save_meta_field( $post_id ) { $custom_fields = [ 'checkxox', ]; foreach( $custom_fields as $d ) { if ( isset( $_POST['nonce-' . $d] ) && $_POST['nonce-' . $d] ) { if( check_admin_referer( 'action-' . $d, 'nonce-' . $d ) ) { if( isset( $_POST[$d] ) && $_POST[$d] ) { update_post_meta( $post_id, $d, $_POST[$d] ); }else{ update_post_meta( $post_id, $d, '' ); } } } } }

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

退会済みユーザー

退会済みユーザー

2019/02/26 06:40

チェックボックスを表示している箇所の、webブラウザ上でのhtmlソースがどうなっているか見せてください。
CHERRY

2019/02/26 06:59

カスタムフィールドは、どのように作成されましたか?  なにかプラグインをお使いですか? functions.php にコードを記載したのであれば、カスタムフィールドを定義している部分のコードを質問に追記していただけないでしょうか?

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

WordPress

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

PHP

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