访问Wordpress中save_post挂钩中的复选框值

时间:2017-05-15 00:44:37

标签: php wordpress

我的情况是可以保存帖子,如果"发送警报"保存帖子时可以通知用户。复选框已被选中。我不希望保存复选框,因为只有在您希望发出警报时才需要检查该复选框。这使管理员可以毫无困难地保存,编辑等。

到目前为止,我已在帖子的发布框中添加了复选框:

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

2 个答案:

答案 0 :(得分: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');

答案 1 :(得分:0)

复选框有一个checked state,如果它存在,则保存元数据,如果没有,则删除。

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

nonce被使用,因此只有在我们的代码运行时,我们的save_action才会触发。

操作save_post收到三个参数($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' );
}