• カスタムフィールド
    内のコメントがワードプレス内で更新すると消えてしまい...
  • guest 
    カスタムフィールド内のコメントがワードプレス内で更新すると消えてしまいますが、どの辺りに間違いがありそうでしょうか
    回答 1

    返信者画像

    ウェブカツ!!コーチ 
    講師からの回答
    カスタムフィールド「コメント」内で入力をして更新ボタンを押した際に入力内容が消えている場合、2通りの原因が考えられます。

    1.そもそも入力の値が保存されていない(保存する処理に問題あり)
    2.保存はされているが、フィールド内に反映されていない(フィールド内に保存された値を表示する処理に問題あり)

    です。

    公開ボタンを押した際に
    同じ固定ページの編集画面内の「表示オプション」を押して「カスタムフィールド」にチェックを入れると「カスタムフィールド」という欄を表示できるので、
    更新した際にそこに入力された文字列が表示されていなければ保存自体されていません。
    (他にも、DBの中身を直接見て保存されているか確認する方法もあります。)
    詳しくは、下記を参考にしてください。
    http://hokori.net/archives/158

    保存されていないのであれば、
    functions.phpの54行目からの処理を見直してみてください。
    add_action()で定義した関数名と作っている関数名が同じかどうか。
    save_custom_postdata()内の処理が例とあっているか。
    を確認してみましょう。

    保存はされているようであれば、
    custom_area()内のget_post_meta()のキー名が保存する処理のキー名と違う可能性があります。
    get_post_meta()は保存したキー名を指定することで、その値を取り出せるWordPressで用意されている関数です。
    それをtextareaタグ内に埋め込んでいるので、更新した際の画面にもきちんと入力された値が表示される。という仕組みです。
    そのあたりを見直してみましょう。

    guest 
    ご返信いただきありがとうございます。
    本文の通り対応しましたが、エラー箇所が見つけられません。

    データベースのpostmeta内には保存されていないようでした。

    /*===================================
    カスタムフィールド
    ======================================*/
    /*投稿ページへ表示するカスタムボックスを定義する*/
    add_action('admin_menu', 'add_custom_inputbox');
    /*追加した表示項目のデータ更新 保存のためのアクションフック*/
    add_action('save-post', 'save_custom_postdata');

    /*入力項目がどの投稿タイプのページに表示されるかの設定*/
    function add_custom_inputbox() {
    //第一引数:編集画面のhtmlに挿入されるid属性名
    //第二引数:管理画面に表示されるカスタムフィールド名
    //第三引数:メタボックス内に出力される関数名
    //第四引数:管理画面に表示されるカスタムフィールドの場所(postなら投稿、pageなら固定ページ)
    //第五引数:配置される順序
    add_meta_box( 'about_id','ABOUT入力欄', 'custom_area', 'page', 'normal');
    }

    /*管理画面に表示される内容*/
    function custom_area(){
    global $post;

    echo 'コメント :<textarea cols="50" rows="5" name="about_msg">'.get_post_meta($post->ID,'about',true).'</textarea><br>';
    }

    /*投稿ボタンを押した際のデータ更新と保存*/
    function save_custom_postdata($post_id){

    $about_msg = '';

    //カスタムフィールドに入力された情報を取り出す
    if(isset($_POST['about_msg'])){
    $about_msg = $_POST['about_msg'];
    }

    //内容が変わっていた場合、保存していた情報を更新する
    if( $about_msg != get_post_meta($post_id, 'about', true)){
    update_post_meta($post_id, 'about',$about_msg);
    }
    elseif ($about_msg == '') {
    delete_post_meta($post_id, 'about',get_post_meta($post_id,'about',true));
    }
    }

    guest 
    コードの入力を間違えておりました。解決しました。
    ご迷惑をおかけしました。