Voulez-vous ajouter trois metaboxes à vos types de publication personnalisés d'événements ? Bien qu'il existe probablement un plugin pour cela, nous avons créé un extrait de code rapide que vous pouvez utiliser pour ajouter des metaboxes de date de début, de date de fin et de lieu pour les types de publication personnalisés d'événements.
Instructions :
Il vous suffit d'ajouter ce code au fichier functions.php de votre thème ou dans un plugin spécifique au site :
function ep_eventposts_metaboxes() {
add_meta_box( 'ept_event_date_start', 'Start Date and Time', 'ept_event_date', 'event', 'side', 'default', array( 'id' => '_start') );
add_meta_box( 'ept_event_date_end', 'End Date and Time', 'ept_event_date', 'event', 'side', 'default', array('id'=>'_end') );
add_meta_box( 'ept_event_location', 'Event Location', 'ept_event_location', 'event', 'side', 'default', array('id'=>'_end') );
}
add_action( 'admin_init', 'ep_eventposts_metaboxes' );
// Metabox HTML
function ept_event_date($post, $args) {
$metabox_id = $args['args']['id'];
global $post, $wp_locale;
// Use nonce for verification
wp_nonce_field( plugin_basename( __FILE__ ), 'ep_eventposts_nonce' );
$time_adj = current_time( 'timestamp' );
$month = get_post_meta( $post->ID, $metabox_id . '_month', true );
if ( empty( $month ) ) {
$month = gmdate( 'm', $time_adj );
}
$day = get_post_meta( $post->ID, $metabox_id . '_day', true );
if ( empty( $day ) ) {
$day = gmdate( 'd', $time_adj );
}
$year = get_post_meta( $post->ID, $metabox_id . '_year', true );
if ( empty( $year ) ) {
$year = gmdate( 'Y', $time_adj );
}
$hour = get_post_meta($post->ID, $metabox_id . '_hour', true);
if ( empty($hour) ) {
$hour = gmdate( 'H', $time_adj );
}
$min = get_post_meta($post->ID, $metabox_id . '_minute', true);
if ( empty($min) ) {
$min = '00';
}
$month_s = '<select name="' . $metabox_id . '_month">';
for ( $i = 1; $i < 13; $i = $i +1 ) {
$month_s .= "\t\t\t" . '<option value="' . zeroise( $i, 2 ) . '"';
if ( $i == $month )
$month_s .= ' selected="selected"';
$month_s .= '>' . $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) ) . "</option>\n";
}
$month_s .= '</select>';
echo $month_s;
echo '<input type="text" name="' . $metabox_id . '_day" value="' . $day . '" size="2" maxlength="2" />';
echo '<input type="text" name="' . $metabox_id . '_year" value="' . $year . '" size="4" maxlength="4" /> @ ';
echo '<input type="text" name="' . $metabox_id . '_hour" value="' . $hour . '" size="2" maxlength="2"/>:';
echo '<input type="text" name="' . $metabox_id . '_minute" value="' . $min . '" size="2" maxlength="2" />';
}
function ept_event_location() {
global $post;
// Use nonce for verification
wp_nonce_field( plugin_basename( __FILE__ ), 'ep_eventposts_nonce' );
// The metabox HTML
$event_location = get_post_meta( $post->ID, '_event_location', true );
echo '<label for="_event_location">Location:</label>';
echo '<input type="text" name="_event_location" value="' . $event_location . '" />';
}
// Save the Metabox Data
function ep_eventposts_save_meta( $post_id, $post ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
if ( !isset( $_POST['ep_eventposts_nonce'] ) )
return;
if ( !wp_verify_nonce( $_POST['ep_eventposts_nonce'], plugin_basename( __FILE__ ) ) )
return;
// Is the user allowed to edit the post or page?
if ( !current_user_can( 'edit_post', $post->ID ) )
return;
// OK, we're authenticated: we need to find and save the data
// We'll put it into an array to make it easier to loop though
$metabox_ids = array( '_start', '_end' );
foreach ($metabox_ids as $key ) {
$events_meta[$key . '_month'] = $_POST[$key . '_month'];
$events_meta[$key . '_day'] = $_POST[$key . '_day'];
if($_POST[$key . '_hour']<10){
$events_meta[$key . '_hour'] = '0'.$_POST[$key . '_hour'];
} else {
$events_meta[$key . '_hour'] = $_POST[$key . '_hour'];
}
$events_meta[$key . '_year'] = $_POST[$key . '_year'];
$events_meta[$key . '_hour'] = $_POST[$key . '_hour'];
$events_meta[$key . '_minute'] = $_POST[$key . '_minute'];
$events_meta[$key . '_eventtimestamp'] = $events_meta[$key . '_year'] . $events_meta[$key . '_month'] . $events_meta[$key . '_day'] . $events_meta[$key . '_hour'] . $events_meta[$key . '_minute'];
}
// Add values of $events_meta as custom fields
foreach ( $events_meta as $key => $value ) { // Cycle through the $events_meta array!
if ( $post->post_type == 'revision' ) return; // Don't store custom data twice
$value = implode( ',', (array)$value ); // If $value is an array, make it a CSV (unlikely)
if ( get_post_meta( $post->ID, $key, FALSE ) ) { // If the custom field already has a value
update_post_meta( $post->ID, $key, $value );
} else { // If the custom field doesn't have a value
add_post_meta( $post->ID, $key, $value );
}
if ( !$value ) delete_post_meta( $post->ID, $key ); // Delete if blank
}
}
add_action( 'save_post', 'ep_eventposts_save_meta', 1, 2 );
/**
* Helpers to display the date on the front end
*/
// Get the Month Abbreviation
function eventposttype_get_the_month_abbr($month) {
global $wp_locale;
for ( $i = 1; $i < 13; $i = $i +1 ) {
if ( $i == $month )
$monthabbr = $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) );
}
return $monthabbr;
}
// Display the date
function eventposttype_get_the_event_date() {
global $post;
$eventdate = '';
$month = get_post_meta($post->ID, '_month', true);
$eventdate = eventposttype_get_the_month_abbr($month);
$eventdate .= ' ' . get_post_meta($post->ID, '_day', true) . ',';
$eventdate .= ' ' . get_post_meta($post->ID, '_year', true);
$eventdate .= ' at ' . get_post_meta($post->ID, '_hour', true);
$eventdate .= ':' . get_post_meta($post->ID, '_minute', true);
echo $eventdate;
}
Remarque : Si c'est la première fois que vous ajoutez des extraits de code dans WordPress, veuillez consulter notre guide sur la manière de copier / coller correctement des extraits de code dans WordPress, afin de ne pas casser accidentellement votre site.
Si vous avez aimé cet extrait de code, n'hésitez pas à consulter nos autres articles sur le site tels que : 15 meilleurs outils et plugins de marketing de contenu et 50+ meilleurs thèmes WordPress réactifs pour créer un site Web prêt pour mobile.
Bonjour à tous,
cet extrait de code est génial ! Merci !!
Mais j'ai une question…
comment puis-je afficher uniquement le JOUR de l'événement dans la rangée du haut et une rangée plus bas, je veux afficher le MOIS.
merci pour votre soutien.
Sven
J'ai amélioré ce type de publication pour créer uniquement _start_timestamp et _end_timestamp dans la base de données et non le jour, le mois, l'année, la minute et l'heure.
Bonjour,
Comment afficher les événements à venir et les événements passés ?
Le code ne semble pas enregistrer les données de localisation. J'ai vérifié la base de données, elles n'y sont pas et elles ne sont pas remplies dans le formulaire lors de la mise à jour.
solution :
ajoutez la ligne suivante juste avant ce commentaire : // Add values of $events_meta as custom fields
$events_meta[‘_event_location’] = $_POST[‘_event_location’];
Je sais que ça fait 2 ans, mais ça fait que ça marche et d'autres pourraient trouver ça utile 😉
exemple de code sur celui-ci ?
À partir de ce code, comment afficher une liste de ces événements sur une seule page de thème ?
Eh bien, les événements dans ce cas seraient un type de publication personnalisé, ou votre publication par défaut. L'affichage de vos événements est le même que pour tout autre type de publication personnalisé, etc. Cet extrait collecte simplement des informations de champ personnalisé dans les valeurs suivantes : _day, _year, _hour, _minute et vous pouvez les afficher à l'aide de la fonction eventposttype_get_the_event_date en bas. Aux lignes 02, 03, 04, vous voyez qu'il est attaché à un type de publication personnalisé appelé « event », vous pourriez le changer en post ou tout autre type de publication que vous aimez. Ensuite, affichez simplement les publications normalement.