我的情况是可以保存帖子,如果"发送警报"保存帖子时可以通知用户。复选框已被选中。我不希望保存复选框,因为只有在您希望发出警报时才需要检查该复选框。这使管理员可以毫无困难地保存,编辑等。
到目前为止,我已在帖子的发布框中添加了复选框:
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钩子中访问复选框的值?
答案 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' );
}