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

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

ただいまの
回答率

91.01%

  • PHP

    17752questions

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

  • WordPress

    5983questions

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

WP クイック編集のラジオボタンにチェックを入れた状態で更新すると取れてしまう(カスタムフィールド)

解決済

回答 1

投稿 編集

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

退会済みユーザー

使用プラグイン 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( $publish_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 $publish_name ?>">
                <label class="inline-edit-group">
                    <?php $publish_type = get_field('publish_type');?>
                <?php  
                switch ( $publish_name ) {
                    case 'publish_type':
                        ?><span class="title">状況</span><br>
                        <label style="background: #fff;padding: 0px 0 0 10px;border: 1px solid #ddd;"><input type="radio" name="free" value="free"<?php if ($publish_type == 'free'):?>checked<?php endif; ?>>無<br></label>
                        <label style="background: #fff;padding: 0px 0 0 10px;border: 1px solid #ddd;"><input type="radio" name="free" value="premium"<?php if ($publish_type == 'premium'):?>checked<?php endif; ?>>有</label>
                            <?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', $_REQUEST['free'] );
            } 
            if (isset($_REQUEST['premium'])) {
                update_post_meta($post_id, 'publish_type', $_REQUEST['premium'] );
            }
        }
        add_action('save_post', 'save_custom_meta');

    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 $free = $('.column-free', $post_row).html();
            $(':input[name="publish_type"]', $edit_row).val($free);

            var $premium = $('.column-premium', $post_row).html();
            $(':input[name="publish_type"]', $edit_row).val($premium);
        }
    };
})(jQuery);
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

取れてしまうのではなくて、カスタムフィールドの値を取得してないから出ないだけです。
参考にされたサイトも一覧では空白になるはずです。

カスタムフィールドの値がどちらか判別して以下の部分で表示するようにすれば良いだけだと思います。

<input type="radio" name="free" value="free">無
<input type="radio" name="free" value="premium">有

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/10/11 13:18 編集

    回答ありがとうございます。カスタムフィールドの値の取得を
    <?php $publish_type = get_field('publish_type');?>で取得し、
    カスタムフィールドの判断を<?php if ($publish_type == 'free'):?>と
    <?php if ($publish_type == 'premium'):?>で判断するようにしました。
    しかしクイック編集のラジオボタン「有」→「無」に切り替えても切り替わらなくて1度ブラウザーの
    更新をかけるとラジオボタンが切り替わります。一体何が原因なのかわかりますか?

    キャンセル

  • 2017/10/11 13:57 編集

    ブラウザの更新とか関係ないと思います。

    プラグイン API/アクションフック一覧/quick edit custom box
    https://wpdocs.osdn.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3_API/%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%83%E3%82%AF%E4%B8%80%E8%A6%A7/quick_edit_custom_box

    >アクション関数は、ポストIDもカラムの既存値も渡されないことに注意してください。

    という事なので
    <?php $publish_type = get_field('publish_type');?>
    は意味を成しません。

    $publish_typeの中身を確認してますか?
    多分、全て最新の投稿の情報になると思います。

    キャンセル

  • 2017/10/11 16:02

    $publish_typeの中身を確認すると最新の情報では無い状態です。ブラウザを更新すると$publish_typeの中身が最新の状態になります。もしかしたらJSに記述してあるプログラムがおかしいのでしょうか?

    キャンセル

  • 2017/10/11 16:22

    自分も打ち間違ってたので既に修正してますが、最新の状態の意味が分からないんですが、$publish_typeは一番新しい投稿のカスタムフィールドの値にしかならないと思いますが、違いますか?

    キャンセル

  • 2017/10/11 16:43

    $publish_typeをvar_dump() してみると一つ前の動作の値になっていました。
    有→無にラジオボタンを変えたら有にチェックが入ってる状態です。個別記事ページでは、有→無に切り替わっていました。ページを更新するとクイック編集のラジオボタンが有→無に切り替わっていました。

    キャンセル

  • 2017/10/11 17:25

    >$publish_typeをvar_dump() してみると一つ前の動作の値になっていました。
    ブラウザを更新しないとそうでしょうね。

    ちょっと試してください。
    ラジオボタンを表示させてる部分で echo get_the_ID(); でIDを出力させるとどうなるのか。

    キャンセル

  • 2017/10/11 17:39

    echo get_the_ID();でIDを出力すると1ページ目の記事ID7734と表示されました。1ページ目の別の記事をクイック編集で確認するとID7734と表示されていました。2ページ目の記事は2ページ内にある記事全てがID7754と表示されていました。

    キャンセル

  • 2017/10/11 17:51

    $publish_typeのvar_dumpも同じような結果ではないですか?

    キャンセル

  • 2017/10/11 17:53

    $publish_typeのvar_dumpも全て同じ値が出ていました。

    キャンセル

  • 2017/10/11 17:57

    という事なので最初に書いた通り
    <?php $publish_type = get_field('publish_type');?>
    は意味を成しません。

    キャンセル

  • 2017/10/11 18:03

    そういうことだったんですね、ありがとうございます。
    となるとまた別の方法でカスタムフィールドを取得する必要があるということですね、どのような関数を使ったらよろしいのでしょうか?

    キャンセル

  • 2017/10/11 18:26

    やっと理解してもらえたようですが、全て同じ値になる事もその質問に関することも最初の返信のURLのページに書いてあるので良く読んでください。

    既存値の設定

    キャンセル

  • 2017/10/11 18:53

    ありがとうございます。URLのページ読んでみます。

    キャンセル

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

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

関連した質問

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

  • PHP

    17752questions

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

  • WordPress

    5983questions

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

  • トップ
  • PHPに関する質問
  • WP クイック編集のラジオボタンにチェックを入れた状態で更新すると取れてしまう(カスタムフィールド)