我尝试在wordpress上以自定义帖子类型创建复选框,数据库中的注册已完成,但是我希望如果取消选中该复选框,则该复选框仍为空。
<?php
class Fastcat_Metabox
{
private $id;
private $title;
private $post_type;
private $fields = [];
public static function addJS(){
add_action('admin_enqueue_scripts', function(){
wp_register_script('uploaderjs', get_template_directory_uri() . '/assets/js/uplaoder.js');
wp_enqueue_script('uploaderjs');
});
}
/**
* Fastcat_Metabox constructor.
* @param $id ID de la boite
* @param $title Titre de la boite
* @param $post_type Post type
*/
// Construction de la function
public function __construct($id , $title, $post_type)
{
add_action('admin_init', array(&$this, 'create'));
add_action('save_post', array(&$this, 'save'));
$this->id = $id;
$this->title = $title;
$this->post_type = $post_type;
}
public function create(){
if(function_exists('add_meta_box')) {
add_meta_box($this->id , $this->title, array(&$this, 'render'), $this->post_type);
}
}
public function save($post_id){
if(
(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) ||
(defined('DOING_AJAX') && DOING_AJAX)
){
return false;
}
if(!current_user_can('edit_post', $post_id)){
return false;
}
if (!wp_verify_nonce($_POST[$this->id . '_nonce'], $this->id)){
return false;
}
foreach($this->fields as $field) {
$meta = $field['id'];
if(isset($_POST[$meta])){
$value = $_POST[$meta];
if(get_post_meta($post_id, $meta)){
update_post_meta($post_id, $meta, $value);
} else {
if ($value === '') {
delete_post_meta($post_id, $meta);
} else {
add_post_meta($post_id, $meta , $value );
}
}
}
}
public function render(){
global $post;
foreach($this->fields as $field) {
extract($field);
$value = get_post_meta($post->ID, $id , true);
if($value == ''){
$value = $default;
}
require __DIR__ .'/'. $field['type'] . '.php';
}
echo '<input type="hidden" name="' .$this->id .'_nonce" value="' .wp_create_nonce($this->id). '">';
}
public function add($id, $label, $type='text' , $default='') {
$this->fields[] = [
'id' => $id,
'name' => $label,
'type' => $type,
'default' => $default
];
return $this;
}
}
Fastcat_Metabox::addJS();
// CUSTOM POST TYPE -> COMPETITION -> Ajout des parties Information et Date supplémentaire
$box = new Fastcat_Metabox('compet' , '<h2>Information compétition</h2>', 'competition');
$box->add('fastcat_adresse','<strong> Adresse: </strong> ')
->add('fastcat_startdate', '<strong>Date </strong> ', 'date' )
->add('fastcat_starttime', '<strong>Heure de début </strong> ', 'time' )
->add('fastcat_enddate', ' <strong>Heure de fin </strong>', 'timeend')
->add('fastcat_choice', '<strong>Choix compétitions </strong>', 'checkbox')
->add('fastcat_choice2', '<strong>Choix compétitions </strong>', 'checkbox2')
->add('fastcat_description', '<strong>Description de la compétition </strong>', 'textarea')
->add('fastcat_space', '<strong>Nombre de place </strong> ', 'number')
->add('fastcat_rate', '<strong>Tarif </strong>', 'rate');
$box = new Fastcat_Metabox('ition' , '<h2>Date Supplémentaire</h2>', 'competition');
$box->add('fastcat_startdate2', '<strong>Date</strong> ', 'date2')
->add('fastcat_starttime2', '<strong>Heure de début</strong> ', 'time2')
->add('fastcat_enddate2', '<strong> Heure de fin </strong>', 'timeend2')
->add('fastcat_startdate3', '<strong>Date</strong> ', 'date3')
->add('fastcat_starttime3', '<strong>Heure de début</strong> ', 'time3')
->add('fastcat_enddate3', '<strong> Heure de fin</strong> ', 'timeend3');
$box = new Fastcat_Metabox('cat' , '<h2>Information organisateur</h2>', 'competition');
$box->add('fastcat_organisateur','<strong>Nom de l\'organisateur</strong>','name_organisateur')
->add('fastcat_picture', '<strong Image de l\'organisateur','picture_organisateur')
->add('fastcat_club', '<strong>Numéro de club</strong> ', 'number_club')
->add('fastcat_adresse','<strong> Adresse: </strong> ', 'text')
->add('fastcat_phone', '<strong> Téléphone </strong>', 'phone')
->add('fastcat_mail', '<strong>Email</strong> ', 'mail')
->add('fastcat_siteweb', '<strong>Site internet</strong> ', 'web')
->add('fastcat_description_organisateur', '<strong>Description de la compétition </strong>', 'textarea2');
<div class="meta-box-item-content" style="padding-bottom:0.3rem; ">
<input type="checkbox" id="<?= $id; ?>" name="<?= $id; ?>" value="Fastcat" <?php if($value == "Fastcat" ) $value_checked = 'checked="checked"'; echo $value_checked; $
<label for="<?= $value; ?>">FASTCAT</label>
</div>
我尝试在wordpress上以自定义帖子类型创建复选框,数据库中的注册已完成,但是我希望如果取消选中该复选框,则该复选框仍为空。