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

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

ただいまの
回答率

88.82%

WP クイック編集に設置したラジオボタンを個別記事投稿に反映する方法(カスタムフィールド)

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,092
退会済みユーザー

退会済みユーザー

使用プラグイン Advanced Custom Fields

個別記事投稿ページに設置してあるラジオボタンをクイック編集出来るようにプログラムを組んだのですが、クイック編集で選択した物が管理画面の個別記事投稿ページに反映されていませんでした、
色々と参考サイトを見ましたが、参考になるサイトが無くて色々とカスタマイズしましたが、知識が浅く限界がありました。
わかる方居ましたら教えてください。

参考サイト https://increment-log.com/quickedit-custom-field/

カスタムフィールド名
publish_type

ラジオボタン選択肢
free : 無
premium : 有

/**
 * 投稿一覧に項目を追加する
 */
function my_posts_columns($defaults) {
    $defaults['publish_type'] = '状況';
    return $defaults;
}

add_filter('manage_posts_columns', 'my_posts_columns');
/**
 * 投稿一覧に追加した項目に値を表示する
 */
function my_posts_custom_column($column, $post_id) {
    switch ($column) {
        case 'publish_type':
            $post_meta = get_post_meta($post_id, 'publish_type', true);
            if ($post_meta == 'free') {
                echo '無';
            } elseif ($post_meta == 'premium') {
                echo '有'; 
            } else {
                echo '';
            }
            break;
        case 'display':
    }
}

add_action('manage_posts_custom_column', 'my_posts_custom_column', 10, 2);




//クイック編集にカスタムフィールド(掲載状況)の入力フォームを表示
    function display_my_custom_quickedit($column_name, $post_type) {
        static $print_nonce = TRUE;
        if ($print_nonce) {
            $print_nonce = FALSE;
            wp_nonce_field('quick_edit_action', $post_type . '_edit_nonce'); //CSRF対策
        }
        ?>
        <fieldset class="inline-edit-col-right inline-custom-meta">
            <div class="inline-edit-col column-<?php echo $column_name ?>">
                <label class="inline-edit-group">
                    <?php
                    switch ($column_name) {
                        case 'publish_type':
                            ?>
                    <input type="radio" name="fields[field_570f985309a6c]" value="free" checked>無
                    <input type="radio" name="fields[field_570f985309a6c]" value="premium">有
                            <?php
                            break;
                    }
                    ?>
                </label>
            </div>
        </fieldset>
        <?php
    }
    add_action('quick_edit_custom_box', 'display_my_custom_quickedit', 10, 2);

//カスタムフィールドの保存処理
    function save_custom_meta($post_id) {
        $slug = 'post'; //カスタムフィールドの保存処理をしたい投稿タイプを指定

        if ($slug !== get_post_type($post_id)) {
            return;
        }
        if (!current_user_can('edit_post', $post_id)) {
            return;
        }

        $_POST += array("{$slug}_edit_nonce" => '');
        if (!wp_verify_nonce($_POST["{$slug}_edit_nonce"], 'quick_edit_action')) {
            return;
        }

        if (isset($_REQUEST['free'])) {
            update_post_meta($post_id, 'publish_type', 'free');
        } elseif (isset($_REQUEST['premium'])) {
            update_post_meta($post_id, 'publish_type', 'premium');
        }
    }

    add_action('save_post', 'save_custom_meta');

//管理ページ(投稿一覧)でスクリプトの読み込み
    function my_admin_edit_foot() {
        global $post_type;
        $slug = 'post'; //他の一覧ページで動作しないように投稿タイプの指定をする

        if ($post_type == $slug) {
            echo '<script type="text/javascript" src="', get_stylesheet_directory_uri() . '/admin/js/main.js', '"></script>';
        }
    }

    add_action('admin_footer-edit.php', 'my_admin_edit_foot');

main.js

//カスタムフィールドのクイック編集動作
(function($) {
    var $wp_inline_edit = inlineEditPost.edit;

    inlineEditPost.edit = function( id ) {
        $wp_inline_edit.apply( this, arguments );

        var $post_id = 0;
        if ( typeof( id ) == 'object' )
            $post_id = parseInt( this.getId( id ) );

        if ( $post_id > 0 ) {
            var $edit_row = $( '#edit-' + $post_id );
            var $post_row = $( '#post-' + $post_id );

            var $publish_type = !! $('.column-publish_type>*', $post_row).attr('checked');
            $( ':input[fields[field_570f985309a6c] checked', $edit_row ).attr('checked', $publish_type );
        }
    };

})(jQuery);
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2017/10/10 19:56

    参考にされたサイトはカラムを追加するように書かれてますが、それをしなくても実装可能なんでしょうか?

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2017/10/10 20:46

    ↑こんな感じで訊いたら、ただ黙って質問を編集するだけ、後はよろしく!って感じでしょうか?こっちも一応人間なんですけどね。ロボット相手にしてるんだったら何でも良いでしょうけど。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2017/10/10 22:18

    vd($post_meta);とは何ですか?

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2017/10/10 23:12

    ではこちらで書き込みますね、vd($post_meta);は、var_dumpです。消し忘れだったので先ほど削除しました。

    キャンセル

回答 1

checkベストアンサー

+1

返答ありがとうございました。

データの渡し方とupdate_post_metaの作法に問題があると思います。

                    <input type="radio" name="free" value="free">無
                    <input type="radio" name="free" value="premium">有
        if (isset($_REQUEST['free'])) {
            update_post_meta($post_id, 'publish_type', $_REQUEST['free'] );
        } 
        if (isset($_REQUEST['premium'])) {
            update_post_meta($post_id, 'publish_type', $_REQUEST['premium'] );
        }

//管理ページ(投稿一覧)でスクリプトの読み込みは要らないと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/11 10:09

    ありがとうございます。解決しました。

    キャンセル

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

  • ただいまの回答率 88.82%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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

  • トップ
  • PHPに関する質問
  • WP クイック編集に設置したラジオボタンを個別記事投稿に反映する方法(カスタムフィールド)