Wordpressのカスタム投稿の編集画面をカスタマイズしたい(ラジオボタン、チェックボックス、プルダウンボックスの設置)
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,120
前提・実現したいこと
Wordpressでプラグインを使わずカスタム投稿の編集画面をカスタマイズしています。
その投稿の編集画面にラジオボタン、チェックボックス、プルダウンボックスを設置したいと考えています。
通常のテキストフィールドは追加できました。
発生している問題・エラーメッセージ
投稿画面自体にそれぞれのパーツは設置できたのですが、編集後更新をしても保存されず未選択に戻ってしまう。
該当のソースコード
function.phpに下記の記述を追加しました。
<?php
function create_post_type() {
register_post_type(
'info',
array(
'label' => 'ラベル',
'labels' => array(
'all_items' => 'ラベル一覧',
),
'description' => 'ラベルの紹介です',
'public' => true,
'has_archive' => true,
'menu_position' =>3,
'supports' => array(
'title',
'editor',
),
)
);
}
add_action( 'init', 'create_post_type' );
function add_my_box() {
add_meta_box('info_box', 'ラベル', 'info_box_form', 'info', 'normal', 'high');
}
add_action('add_meta_boxes', 'add_my_box');
function info_box_form() {
global $post;
wp_nonce_field(wp_create_nonce(__FILE__), 'my_nonce');
?>
<table>
<tr>
<th>ラベルタイトル</th>
<td><input type="text" name="info_title" value="<?php echo esc_html(get_post_meta($post->ID, 'info_title', true)); ?>" /></td>
</tr>
<tr>
<th>ラベル種類</th>
<td><select name="info_select">
<option>選択してください</option>
<?php
$info_select = array('種類1','種類2','種類3');
foreach($info_select as $key => $val):
$check = (isset($meta['info_select'][0]) && $meta['info_select'][0] == $val) ? ' selected="selected"' : '';
?>
<option value="<?php echo $val; ?>"<?php echo $check; ?>><?php echo $val; ?></option>
<?php endforeach; ?>
</select>
</td>
</tr>
<tr>
<th>ラベル有無</th>
<td><?php
$info_target = array('有','無');
foreach($info_target as $key => $val):
$check = '';
if( isset($meta['info_onoff'][0]) && $meta['info_onoff'][0] == $val ):
$check = ' checked="checked"';
elseif($key == 0):
$check = ' checked="checked"';
endif;
?>
<input type="radio" name="info_onoff" id="info_onoff<?php echo $key; ?>" value="<?php echo $val; ?>"<?php echo $check; ?>><label for="info_onoff<?php echo $key; ?>"><?php echo $val; ?></label>
<?php endforeach; ?>
</td>
</tr>
</table>
<?php
}
function my_box_save($post_id) {
global $post;
$my_nonce = isset($_POST['my_nonce']) ? $_POST['my_nonce'] : null;
if(!wp_verify_nonce($my_nonce, wp_create_nonce(__FILE__))) {
return $post_id;
}
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return $post_id; }
if(!current_user_can('edit_post', $post->ID)) { return $post_id; }
if($_POST['post_type'] == 'info'){
update_post_meta($post->ID, 'info_title', $_POST['info_title']);
update_post_meta($post->ID, 'info_select', $_POST['info_select']);
update_post_meta($post->ID, 'info_onoff', $_POST['info_onoff']);
}
foreach ($mydata as $val) :
$data = $_POST[$val];
if(get_post_meta($post_id, $val) == "")
add_post_meta($post_id, $val, $data, true);
elseif($data != get_post_meta($post_id, $val, true))
update_post_meta($post_id, $val, $data);
elseif($data == "")
delete_post_meta($post_id, $val, get_post_meta($post_id, $val, true));
endforeach;
}
add_action('save_post', 'my_box_save');
function save_my_custom_fields( $post_id ) {
$mydata = $_POST['info_onoff'];
$field_value = get_post_meta($post_id, 'info_onoff', true);
if ($field_value == "")
add_post_meta($post_id, 'info_onoff', $mydata, true);
elseif($mydata != $field_value)
update_post_meta($post_id, 'info_onoff', $mydata);
elseif($mydata=="")
delete_post_meta($post_id, 'info_onoff', $field_value);
}
add_action('save_post', 'save_my_custom_fields');
function add_custom_column_content($column_name, $id) {
if( $column_name == 'info_onoff' ) {
$meta = get_post_meta($id, 'info_onoff', true);
if( isset($meta) && $meta != '' ) echo esc_html($meta);
}
}
add_action('manage_posts_custom_column', 'add_custom_column_content', 15, 2);
?>
補足情報(言語/FW/ツール等のバージョンなど)
WordPress 4.7.2
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.35%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/03/18 14:17 編集
すみません、当方php等にあまり詳しくなく上記のコードも引用したものをただ組み合わせただけであまり深く理解はしていません。
どのような質問が適切か判断がつきませんが$metaはどのような方法で定義ができるのでしょうか。
2017/03/18 14:33
【ACF | Advanced Custom Fields Plugin for WordPress】
https://www.advancedcustomfields.com/
【Smart Custom Fields — WordPress Plugins】
https://ja.wordpress.org/plugins/smart-custom-fields/
【Getting Started - Custom Field Suite】
http://customfieldsuite.com/
2017/03/18 14:52
わざわざプラグインの情報まで頂きありがとうございます。
こちらを参考にさせていただきます。