2017-12-28 13 views
2

カスタムポストタイプにカラーメタボックスを追加するための小さなプラグインを作成しました。ボックスは正常に表示されますが、データを保存することはできません。フィールドに何かを入力して「更新」をクリックすると、フィールドは空白に戻ります。私はこれを研究し、多くのチュートリアルに続き、それぞれが少しずつ異なるアプローチを提案しました。以下のコードは私にとって一番簡単なものでしたので、私は本当にその中のエラーを特定する助けに感謝します。これは私の最初の質問ですので、私は関連するものは省略して申し訳ありません。Wordpressのカスタムメタボックスが更新されていません - この関数のエラーを特定するのに役立つ必要があります

add_action('add_meta_boxes', 'addmeta'); 
function addmeta() { 
    $post_types = array ('post', 'ev'); 

    foreach ($post_types as $post_type) { 
     add_meta_box (
     'color_box', 
     'Color', 
     'display_meta_box', 
     $post_type, 
     'side' 
     ); 
    } 
} 

add_action ('add_meta_boxes', 'addmeta'); 

機能は、メタボックスを表示するには:ここで

は、私はボックスを追加する方法です

function display_meta_box() { 

    $value = get_post_meta($post->ID, '_mykey', true); 

    wp_nonce_field(basename(__FILE__), 'my_nonce'); 

    ?> 

<label for="color_box"><strong>Color:</strong> </label> 
<input type="text" name="my_text" id="my_text" /> 

    <?php 

} 

をそして、これは、保存機能である:

function save_meta_box ($post_id) { 

    $is_autosave = wp_is_post_autosave($post_id); 
    $is_revision = wp_is_post_revision($post_id); 

    $wp_valid_nonce = false; 

    if(isset($_POST[ 'my_nonce' ])) { 

     if (wp_verify_nonce($_POST['my_nonce'], basename(__FILE__))) { 

      $is_valid_nonce = true; 

     } 

    } 

    if ($is_autosave || $is_revision || !$is_valid_nonce) return; 

    if(array_key_exists('color_box', $_POST)) { 

     update_post_meta(
      $post_id, 
      '_mykey', 
      sanitize_text_field($_POST[ 'color_box' ]) 
     ); 

    } 

} 

add_action('save_post', 'save_meta_box'); 

ありがとうございます!

答えて

2

IDを定義する必要があります。このコードを確認して、確実に動作します。

+0

Aftab Husainが投稿したのと同じ回答を投稿したと思います。 –

+0

いいえ! ) –

+0

私はAftab Husainのコードを改善しました –

1

あなたの機能の入力ボックスに間違った名前を入れていますdisplay_meta_box。あなたの機能を以下の機能に置き換えてください。

function display_meta_box() { 
    global $post; 
    $value = get_post_meta($post->ID, '_mykey', true); 

    wp_nonce_field(basename(__FILE__), 'my_nonce'); 

    ?> 

<label for="color_box"><strong>Color:</strong> </label> 
<input type="text" name="color_box" value="<?php echo $value;?>" id="my_text" /> 

    <?php 

} 

希望すると、これが役立ちます。問題があれば教えてください。

+0

理由はわかりませんが、この方法では投稿の更新後にフィールドに内容が表示されませんでした。値は保存されたが、表示されなかった可能性があります。 他の回答に示唆されているように$ valueを定義すると、問題が解決しました。 $ value = get_post_meta(get_the_ID()、 '_mykey'、true); ありがとうございます! –

+0

はい、私はそう思います。関数内にグローバル変数として$ postを置く問題を解決することもできます。私はグローバル変数として$ postを置いて私の答えを更新します。 –

関連する問題