WordPress
Meta Box
Buscar..
Introducción
Uso simple de una Meta Box en los editores de contenido de wp-admin
Sintaxis
- _x ('Text', 'Description', 'textdomain') se usa para agregar una descripción para el servicio de traducción en lugar de __ ('Text', 'textdomain') que es solo la traducción
- _ex ('Text', 'Description', 'textdomain') se usa para hacer eco del texto traducido con una descripción
Observaciones
El contenido dentro de la meta caja de render puede ser cualquier cosa. En lugar de que los valores se integren directamente, también puede usar un include
con una plantilla de PHP y usar el método set_query_var
para pasarle datos. La salvación funcionaría de la misma manera.
Un ejemplo simple con una entrada regular y una entrada de selección
/**
* 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow