Recherche…


Introduction

Utilisation simple d'une méta-boîte dans les éditeurs de contenu wp-admin

Syntaxe

  • _x ('Text', 'Description', 'textdomain') est utilisé pour ajouter une description du service de traduction au lieu de __ ('Text', 'textdomain') qui n'est que la traduction
  • _ex ('Text', 'Description', 'textdomain') est utilisé pour faire écho au texte traduit avec une description

Remarques

Le contenu de la boîte de métadonnées de rendu peut être n'importe quoi. Au lieu que les valeurs soient directement intégrées, vous pouvez également utiliser un include avec un modèle PHP et utiliser la méthode set_query_var pour lui transmettre des données. La sauvegarde fonctionnerait de la même manière.

Un exemple simple avec une entrée régulière et une entrée de sélection

/**
* Add meta box to post types.
*
* @since  1.0.0
*/
function myplugin_add_meta_box() {
    // Set up the default post types/
    $types = array(
        'post',
    );

    // Optional filter for adding the meta box to more types. Uncomment to use.
    // $types = apply_filters( 'myplugin_meta_box_types', $types );

    // Add the meta box to the page
    add_meta_box(
        'myplugin-meta-box', // Meta Box Id. Can be anything.
        _x( 'Custom Meta', 'Custom Meta Box', 'myplugin' ), // The title of the meta box. Translation is optional. Can just be string.
        'myplugin_render_meta_box', // The render meta box function.
        $types, // Add the post types to which to add the meta box.
        'side', // Show on the side of edit.
        'high' // Show at top of edit.
    );
}

add_action( 'add_meta_boxes', 'myplugin_add_meta_box' );

/**
* Render the meta box.
*
* This shows examples of a basic input and a select inside a meta box. These can be anything.
*
* @since  1.0.0
*
* @param $post WP_Post The post being edited.
*/
function myplugin_render_meta_box( $post ) {
    // Get the current post meta values for our custom meta box.
    $city  = get_post_meta( $post->ID, 'city', true ); // True is for returning a single value.
    $country = get_post_meta( $post->ID, 'country', true ); // True is for returning a single value.

    // Add the WP Nonce field for security.
    wp_nonce_field( plugin_basename( __FILE__ ), 'myplugin_meta_nonce' );
?>

<p>
    <label for="city">
        <?php _ex( 'City', 'Custom Meta Box Template', 'myplugin' ); ?>
    </label>
    <input name="city" id="city" value="<?php echo $city; ?>" />
</p>
<p>
    <label for="country">
        <?php _ex( 'Country', 'Custom Meta Box Template', 'myplugin' ); ?>
    </label>
    <select name="country" id="country">
        <option value="United States" <?php selected( $country, 'United States' ); ?>><?php _ex( 'United States', 'Custom Meta Box Template', 'myplugin' ); ?></option>
        <option value="Mexico" <?php selected( $country, 'Mexico' ); ?>><?php _ex( 'Mexico', 'Custom Meta Box Template', 'myplugin' ); ?></option>
        <option value="Canada" <?php selected( $country, 'Canada' ); ?>><?php _ex( 'Canada', 'Custom Meta Box Template', 'myplugin' ); ?></option>
    </select>
</p>

<?php
}

/**
* Save meta box data.
*
* @since  1.0.0
*
* @param $post_id int The Id of the Post being saved.
*/
function myplugin_save_meta_data( $post_id ) {
    // Verify this is not an auto save.
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    // Validate the meta box nonce for security.
    if ( ! isset( $_POST['myplugin_meta_nonce'] ) || ! wp_verify_nonce( $_POST['myplugin_meta_nonce'], plugin_basename( __FILE__ ) ) ) {
        return;
    }

    // Get the new values from the form.
    $city    = $_POST['city'];
    $country = $_POST['country'];

    // update_post_meta will add the value if it doesn't exist or update it if it does.
    update_post_meta( $post_id, 'city', $city );
    update_post_meta( $post_id, 'country', $country );

    /*
    * OPTIONAL ALTERNATIVE
    *
    * Instead of just using update_post_meta, you could also check the values and 
    * issue create/update/delete on the post meta value.
    */
    // $current_city_value = get_post_meta( $post_id, 'city', true ); // True is for returning a single value.
    //
    // // Add the post meta if it doesn't exist.
    // if ( $city && '' === $city ) {
    //     add_post_meta( $post_id, 'city', $city, true ); // True means the key is unique to the post. False is default and more than one can be added.
    // }
    // // Edit the post meta if it does exist and there is a new value. 
    // elseif ( $city && $city != $current_city_value ) {
    //     update_post_meta( $post_id, 'city', $city );
    // } 
    // // Delete the post meta if there is no new value. 
    // elseif ( '' === $city && $current_city_value ) {
    //     delete_post_meta( $post_id, 'city', $current_city_value ); // $current_city_value is optional and is used to differentiate between other values with the same key.
    // }
}

add_action( 'save_post', 'myplugin_save_meta_data' );


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow