2017-05-15 10 views
1

投稿を保存し、[警告を送信する]チェックボックスがオンの場合に投稿が保存されるときにユーザーに通知することができます。チェックボックスをチェックする必要があるので、チェックボックスを保存する必要はありません。アラートを送信するときだけです。これにより、管理者は問題なく保存、編集などを行うことができます。その後、Wordpressのsave_postフックのチェックボックス値にアクセスする

function createCustomField(){ 
    $post_id = get_the_ID(); 

    if(get_post_type($post_id) != 'jobs'){ 
    return; 
    } 

    $value = get_post_meta($post_id, '_send_alert', true); 
    wp_nonce_field('send_alert_nonce_'.$post_id, 'send_alert_nonce'); 
    ?> 
    <div class="misc-pub-section misc-pub-section-last"> 
     <label><input type="checkbox" value="1" name="_send_alert" /><?php _e('Send alerts', 'pmg'); ?></label> 
    </div> 
    <?php 
} 
add_action('post_submitbox_misc_actions', 'createCustomField'); 

をそして、それがチェックされているかどうか、チェックボックスをチェックする必要があるだけでなくsave_postフックを設定していると:

これまでのところ、私はポストのためにパブリッシュボックスにチェックボックスを追加しましたアラートがあれば送信します。

function save_job_callback($post_id){ 
    global $post; 

    if($checkbox){ 
    //send out alerts here 
    } 
} 
add_action('save_post','save_job_callback'); 

質問があります - save_postフック内のチェックボックスの値にはどうすればアクセスできますか?

Checkbox in Wordpress publish box

答えて

0

関数のパラメータとして、チェックボックスの値を渡します。

function save_job_callback($post_id,$checkbox=$_POST['checkbox']){ 
    global $post; 

    if($checkbox){ 
    //send out alerts here 
    } 
} 
add_action('save_post','save_job_callback'); 
+0

はいああ!だからシンプル - 頭がおかしい脳: – PavKR

+0

これは、PHPが狂った言語であるためにのみ有効です...正しいパラメータは** 'do_action( 'save_post'、$ post_ID、$ post、$ update);' ** – brasofilo

0

チェックボックスがchecked stateを持っている、それは存在だ場合、それが削除されますされていない場合、メタデータは、保存されます。

<input type="checkbox" id="coding" name="interest" value="coding" checked> 

当社save_actionは、我々のコードが実行されている場合にのみ、どこにでも発生しませんので、nonceが使用されています。

アクションsave_postは、3つの引数($post_id, $post_object, $update)を受け取り、コードが適切な場所で実行されていることを確認した後、投稿された値を$_POSTでチェックする必要があります。

の作業コード:

add_action('post_submitbox_misc_actions', 'checkbox_so_43970149'); 
add_action('save_post', 'save_so_43970149', 10, 3); 

function checkbox_so_43970149(){ 
    $post_id = get_the_ID(); 

    if(get_post_type($post_id) != 'jobs'){ 
    return; 
    } 

    wp_nonce_field('send_alert_nonce_'.$post_id, 'send_alert_nonce'); 

    $value = get_post_meta($post_id, '_send_alert', true); 
    $checked =checked($value, '_send_alert', false); 
    ?> 
    <div class="misc-pub-section misc-pub-section-last"> 
     <label><input type="checkbox" value="_send_alert" <?php echo $checked; ?> name="_send_alert" /><?php _e('Send alerts', 'pmg'); ?></label> 
    </div> 
    <?php 
} 

function save_so_43970149($post_id, $post_object, $update) { 
     if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) 
      return; 

     if (!wp_verify_nonce($_POST['send_alert_nonce'], 'send_alert_nonce_'.$post_id)) 
      return; 

    if ('revision' == $post_object->post_type) 
     return; 

    if (isset($_POST['_send_alert']) ) 
     update_post_meta($post_id, '_send_alert', $_POST['_send_alert']); 
    else 
     delete_post_meta($post_id, '_send_alert'); 
} 
+0

です_send_alertチェックボックスの値を保存しないので、update_post_metaとdelete_post_metaステートメントを省略してください。 – PavKR

+0

はい、まさに... – brasofilo

関連する問題