2017-12-28 18 views
0

しばらく私のウェブサイトで作成して使っているカスタムメタボックスがありますが、保存方法には少し問題があります。むしろ揮発性の傾向があります。つまり、XMLまたは一括編集でバックアップすると、データが失われます。 Wordpressカスタムメタボックスチェックボックス問題を保存する

が起きてからこの問題を防ぐためにどのような方法があります私は、チェックボックスのために使用し、それを

function member_page_featured_meta() { 
     add_meta_box('member_page_meta', __('Page Template (if default, select none)', 'member_page_textdomain'), 'member_page_meta_callback', 'page', 'side', 'low'); 
    } 
add_action('add_meta_boxes', 'member_page_featured_meta'); 

/** 
* Outputs the content of the meta box 
*/ 

function member_page_meta_callback($post) { 
    $values = get_post_meta($post->ID); 
    $check = isset($values['member_box_check']) ? esc_attr($values['member_box_check'][0]) : ''; 
    wp_nonce_field(basename(__FILE__), 'member_page_nonce'); 
    $member_page_stored_meta = get_post_meta($post->ID); 
    ?> 

<p> 
    <div class="member_page-row-content"> 
     <label for="featured-checkbox"> 
      <input type="checkbox" name="featured-checkbox" id="featured-checkbox" value="yes" <?php if (isset ($member_page_stored_meta['featured-checkbox'])) checked($member_page_stored_meta['featured-checkbox'][0], 'yes'); ?> /> 
      <?php _e('Member Page', 'member_page_textdomain')?> 
     </label><br /> 
     <label for="list-checkbox"> 
      <input type="checkbox" name="list-checkbox" id="list-checkbox" value="yes" <?php if (isset ($member_page_stored_meta['list-checkbox'])) checked($member_page_stored_meta['list-checkbox'][0], 'yes'); ?> /> 
      <?php _e('Home List', 'member_page_textdomain')?> 
     </label><br /> 

    </div> 
</p> 

    <?php 
} 

/** 
* Saves the custom meta input 
*/ 
function member_page_meta_save($post_id) { 

    // Checks save status - overcome autosave, etc. 
    $is_autosave = wp_is_post_autosave($post_id); 
    $is_revision = wp_is_post_revision($post_id); 
    $is_valid_nonce = (isset($_POST[ 'member_page_nonce' ]) && wp_verify_nonce($_POST[ 'member_page_nonce' ], basename(__FILE__))) ? 'true' : 'false'; 

    // Exits script depending on save status 
    if ($is_autosave || $is_revision || !$is_valid_nonce) { 
     return; 
    } 

    // Checks for input and saves - save checked as yes and unchecked at no 
    //This line of code is my hack (just keeps the boxes from saving pretty much) 
    //if (!empty($_POST['featured-checkbox']) && !empty($_POST['list-checkbox'])) { 
      if(isset($_POST[ 'featured-checkbox' ])) { 
       update_post_meta($post_id, 'featured-checkbox', 'yes'); 
      } else { 
       update_post_meta($post_id, 'featured-checkbox', 'no'); 
      }; 
      if(isset($_POST[ 'list-checkbox' ])) { 
       update_post_meta($post_id, 'list-checkbox', 'yes'); 
      } else { 
       update_post_meta($post_id, 'list-checkbox', 'no'); 
      }; 
     // (bracket ending the first if statement) } 
    } 
    add_action('save_post', 'member_page_meta_save'); 

を保存するためのコードであるか、チェックを保存するときに対処する必要があるだけで何かであります - 箱?

私は今のところ動いているハックを選別しましたが、チェックボックスを変更する必要があるときはいつも、その使用方法の性質によってかなりの頻度で行われています。コードのいくつかの行をコメントアウトし、変更してから、コード行をコメント解除して、これはちょっと変わったことです。

(バックアップ/制作のウェブサイト上で)バックアップとリストアを行うには、ほとんどの場合、バックアップを作成する必要があります。

答えて

0

​​投稿が作成または更新されるとトリガーになるため、編集や定期的な編集、投稿のインポートによってトリガーされます。

実際には、POST配列に以前に保存されたチェックボックスの値が含まれていないため、クイック編集またはインポートを行うときにポストメタをクリアするスクリプトです。

これを解決するには、現在発生している「保存の種類」を知り、管理領域の投稿編集画面にいるときにのみ投稿メタを更新することができます。の先頭にこのコードを置く

if (filter_input(INPUT_POST, 'action') != 'editpost') { 
    return; 
} 

:ポスト編集画面から保存するときactionパラメータは値のみeditpostを持っているので、これを行う方法は、次のようなPOST配列のアクションパラメータをチェックすることですsave_postアクション(あなたの場合はmember_page_meta_save)にフックされた機能は、ポスト編集画面から保存するときにのみ、残りの機能を実行させます。

+0

これはクイック編集のワイプを防ぐために問題なく動作しているようですが、まだバックアップをテストしていませんが、これ以上の質問があればここでコメントします。助けてくれてありがとう :) –

関連する問題