Doriți să adăugați trei metabox-uri la tipurile de postări personalizate pentru evenimente? Deși probabil există un plugin pentru asta, am creat o scurtă secțiune de cod pe care o puteți folosi pentru a adăuga metabox-uri pentru data de început, data de sfârșit și locația pentru tipurile de postări personalizate pentru evenimente.
Instrucțiuni:
Tot ce trebuie să faceți este să adăugați acest cod în fișierul functions.php al temei dvs. sau într-un plugin specific site-ului:
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;
}
Notă: Dacă este prima dată când adăugați secvențe de cod în WordPress, consultați ghidul nostru despre cum să copiați / lipiți corect secvențe de cod în WordPress, pentru a nu vă defecta accidental site-ul.
Dacă v-a plăcut această secțiune de cod, vă rugăm să luați în considerare vizualizarea celorlalte articole de pe site, cum ar fi: Cele mai bune 15 instrumente și plugin-uri de marketing de conținut și Peste 50 de teme WordPress responsive de top pentru a crea un site web pregătit pentru mobil.
Salutare tuturor,
această secțiune de cod este grozavă! Mulțumesc!!
Dar am o întrebare…
Cum pot afișa doar ZIUA evenimentului pe rândul de sus și un rând mai jos vreau să afișez LUNA.
mulțumesc pentru suportul tău.
Sven
Am îmbunătățit acest tip de postare pentru a crea doar _start_timestamp și _end_timestamp în baza de date și nu zi, lună, an, minut și oră.
Bună,
Cum se afișează evenimentele viitoare și cele trecute?
Codul nu pare să salveze datele despre locație. Am verificat baza de date, nu este acolo și nici nu este populat în formular la actualizare.
soluție:
adăugați următoarea linie chiar înainte de acest comentariu: // Adaugă valorile lui $events_meta ca câmpuri personalizate
$events_meta[‘_event_location’] = $_POST[‘_event_location’];
Știu că au trecut 2 ani, dar asta îl face să funcționeze și poate fi util altora 😉
cod exemplu la acesta?
Din acest cod, cum afișezi o listă a acestor evenimente într-o singură pagină a temei?
Ei bine, evenimentele în acest caz ar fi un tip de postare personalizat sau postarea dvs. implicită. Afișarea evenimentelor dvs. este la fel ca orice alt tip de postare personalizat etc. Acest fragment colectează doar informații despre câmpuri personalizate în următoarele valori. _day, _year, _hour, _minute și le puteți afișa folosind funcția eventposttype_get_the_event_date din partea de jos. Pe liniile 02, 03, 04, vedeți că este atașat la un tip de postare personalizat numit „event” pe care l-ați putea schimba la post sau la orice alt tip de postare doriți. Apoi, pur și simplu afișați postările în mod normal.