Custom Post Type -> La fonction check_admin_referer fait bugguer mon code

  • WordPress :4.9
  • Statut : non résolu
Affichage de 1 message (sur 1 au total)
  • Auteur
    Messages
  • #2038095
    WF
    Participant
    Initié WordPress
    3 contributions

    Bonjour,

    Ma configuration WP actuelle

    • Version de PHP/MySQL : 7.0

    Problème(s) rencontré(s) :

    J’ai créé un Custom Post Type de type recette (de cuisine).

    J’ai ajouter à ce CPT des custom fields par le biais d’un meta box.

    Mon problème est le suivant pour protéger la save j’ai mis en place un wp_nonce_field au moment de la création du formulaire et un check_admin_referer au moment de la save. Cela fonctionne mon problème est que quand je clique sur ajouter une nouvelle recette le check_admin_referer bloque mon script étant donné que le hook save_post est appelé avant le hook add_meta_boxes  et donc il vérifie un nonce field qui n’existe pas encore.

    A l’heure actuelle je peux donc modifier et enregistrer mes recettes qui existait avant que je mette la méthode check_admin_referer mais je ne peux pas en ajouter d’autre car il me bloque avant d’afficher le formulaire de création de la recette.

    Savez-vous pourquoi ???? L’erreur vient surement de moi mais je ne vois pas vraiment la…

    En espérant obtenir votre aide et avoir été suffisamment clair.

    Je fournis mon code en dessous :

    <?php
    /**
     * Création du custom post type : Recette
     */
    function cc_recipe_init() {
        $domain = '';
    	$labels = array(
    		'name'               => _x( 'Recettes', 'post type general name', $domain ),
    		'singular_name'      => _x( 'Recette', 'post type singular name', $domain ),
    		'menu_name'          => _x( 'Recettes', 'admin menu', $domain ),
    		'name_admin_bar'     => _x( 'Recette', 'add new on admin bar', $domain ),
    		'add_new'            => _x( 'Ajouter', 'book', $domain ),
    		'add_new_item'       => __( 'Ajouter une nouvelle recette', $domain ),
    		'new_item'           => __( 'Ajouter une nouvelle recette', $domain ),
    		'edit_item'          => __( 'Modifier la recette', $domain ),
    		'view_item'          => __( 'Voir la recette', $domain ),
    		'all_items'          => __( 'Toutes les recettes', $domain ),
    		'search_items'       => __( 'Rechercher dans les recettes', $domain ),
    		'parent_item_colon'  => __( 'Parent Books:', $domain ),
    		'not_found'          => __( 'Aucune recette trouvé.', $domain ),
    		'not_found_in_trash' => __( 'Aucune recette trouvé dans la corbeille.', $domain )
    	);
    
    	$args = array(
    		'labels'             => $labels,
    		'description'        => __( 'Description.', $domain ),
            'public'             => true,
    		'publicly_queryable' => true,
    		'show_ui'            => true,
    		'show_in_menu'       => true,
    		'query_var'          => true,
    		'rewrite'            => array( 'slug' => 'recettes' ),
    		'capability_type'    => 'post',
    		'has_archive'        => true,
    		'hierarchical'       => false,
    		'menu_position'      => 4,
    		'supports'           => array( 'title', 'editor', 'thumbnail')
    	);
    	register_post_type('cc_recipe', $args);
    }
    add_action('init', 'cc_recipe_init');
    
    /*****************************************************************************
     * 
     * Add meta boxes : Détail de la recette
     * 
     * 
     ******************************************************************************/
    
     /**
      * Ajoute la boite de champs personnalisé sur la page admin
      */
     function cc_add_meta_box() {
    	add_meta_box('cc_recipe_details_meta', 'Détails de la recette', 'cc_recipe_details_meta_build', 'cc_recipe', 'side');
     }
     
    /**
     * Creation de la structure HTML du formulaire
     */
     function cc_recipe_details_meta_build($post) {
    
    	wp_nonce_field('cc_save_meta_boxes', 'cc_details_recipe_564165');
    
    	$difficulty_lvl = 4;
    
    	// Difficulté de la recette
    	$difficulty_select = '<p><label for="cc_recipe_difficulty">Difficulté </label>';
    	$difficulty_select .= '<select name="cc_recipe_difficulty" id="cc_recipe_difficulty">';
    	for($i = 0, $v = $i+1; $i < $difficulty_lvl; $i++, $v++) {
    		$difficulty_select .= '<option value="' . $v . '">' . $v . '</option>';
    	}
    	$difficulty_select .= '</select></p>';
    
    	// Temps de préparation de la recette
    	$preparation_time_input = '<p><label for="cc_recipe_preparation_time">Temps de préparation (h) </label>';
    	$preparation_time_input .= '<input type="number" name="cc_recipe_preparation_time" id="cc_recipe_preparation_time" min="0" value="0"></p>';
    	
    	// Coût de la recette
    	$cost_input = '<p><label for="cc_recipe_cost">Coût (€) </label>'; 
    	$cost_input .= '<input type="number" name="cc_recipe_cost" id="cc_recipe_cost" min="0" step="1" value="0"></p>';
    
    	// Nombres de portion de la recette
    	$serving_input = '<p><label for="cc_recipe_serving">Nombre de portions </label>'; 
    	$serving_input .= '<input type="number" name="cc_recipe_serving" id="cc_recipe_serving" min="0" step="1" value="0"></p>';
    
    	// Création du formulaire à afficher
    	$form_details_recipe = $difficulty_select;
    	$form_details_recipe .= $preparation_time_input;
    	$form_details_recipe .= $cost_input;
    	$form_details_recipe .= $serving_input;
    
    	echo $form_details_recipe;
     }
     add_action('add_meta_boxes', 'cc_add_meta_box');
    
    /**
     * Sauvegarde des valeurs de détail de la recette
     */
     function cc_save_meta_box($post_id) {
    	
    	if(get_post_type($post_id) != 'cc_recipe') {
    		return false;
    	} 
    
    	// Fonctionne quand on clique sur Mettre à jour mais pas quand on clique sur ajouter nouvelle recette
    	check_admin_referer('cc_save_meta_boxes', 'cc_details_recipe_564165');
    	//die();
    	
     }
     add_action('save_post', 'cc_save_meta_box');

Affichage de 1 message (sur 1 au total)
  • Vous devez être connecté pour répondre à ce sujet.