X

Startdatum, Enddatum, Metabox für Events Custom Post Types

Schnipsel von IsItWP

Möchten Sie drei Metaboxen zu Ihren Event-Custom-Post-Types hinzufügen? Obwohl es wahrscheinlich ein Plugin dafür gibt, haben wir einen schnellen Code-Schnipsel erstellt, den Sie verwenden können, um eine Startdatum-, Enddatum- und Orts-Metabox für Event-Custom-Post-Types hinzuzufügen.

Anweisungen:

Sie müssen diesen Code nur zur functions.php-Datei Ihres Themes oder in ein websitespezifisches Plugin einfügen:

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;
}

Hinweis: Wenn Sie zum ersten Mal Code-Schnipsel in WordPress hinzuf ilde{A}gen, lesen Sie bitte unseren Leitfaden, wie Sie Code-Schnipsel richtig in WordPress kopieren / einf ilde{A}gen, damit Sie Ihre Website nicht versehentlich besch ilde{A}digen.

Wenn Ihnen dieser Code-Schnipsel gefallen hat, sollten Sie sich unsere anderen Artikel auf der Website ansehen, wie z. B.: 15 beste Content-Marketing-Tools und Plugins und Über 50 beste responsive WordPress-Themes zur Erstellung einer mobilfreundlichen Website.

Kommentare   Hinterlasse eine Antwort

  1. Hallo zusammen,

    dieser Code-Schnipsel ist großartig! Danke!!

    Aber ich habe eine Frage...
    wie kann ich nur den Event-TAG in der obersten Zeile anzeigen und eine Zeile darunter möchte ich den MONAT anzeigen.

    Danke für Ihre Unterstützung.
    Sven

  2. Kévin Lemonnier 17. Mai 2015 um 11:51 Uhr

    Ich habe diesen Post-Typ verbessert, um nur _start_timestamp und _end_timestamp in der Datenbank zu erstellen und nicht Tag, Monat, Jahr, Minute und Stunde.

  3. Hallo,
    Wie zeige ich kommende und vergangene Events an?

  4. Der Code scheint die Standortdaten nicht zu speichern. Habe die DB überprüft, sie ist nicht da und sie wird beim Aktualisieren nicht im Formular angezeigt.

    1. Lösung:
      fügen Sie die folgende Zeile direkt vor diesem Kommentar ein: // Add values of $events_meta as custom fields

      $events_meta['_event_location'] = $_POST['_event_location'];

      Ich weiß, es ist 2 Jahre her, aber das funktioniert und andere finden es vielleicht hilfreich 😉

  5. Beispielcode hierfür?

  6. Wie zeigt man aus diesem Code eine Liste dieser Events auf einer einzelnen Theme-Seite an?

    1. Nun, die Ereignisse in diesem Fall wären ein benutzerdefinierter Beitragstyp oder Ihr Standardbeitrag. Die Anzeige Ihrer Ereignisse ist dieselbe wie bei jedem anderen benutzerdefinierten Beitragstyp usw. Dieser Ausschnitt sammelt nur benutzerdefinierte Feldinformationen innerhalb der folgenden Werte. _day, _year, _hour, _minute und Sie können sie mit der Funktion eventposttype_get_the_event_date unten anzeigen. In den Zeilen 02, 03, 04 sehen Sie, dass es an einen benutzerdefinierten Beitragstyp namens „event“ angehängt ist. Sie könnten dies zu Beitrag oder einem beliebigen anderen Beitragstyp ändern, den Sie mögen. Zeigen Sie dann Beiträge wie gewohnt an.

Kommentar hinzufügen

Wir freuen uns, dass Sie einen Kommentar hinterlassen haben. Bitte beachten Sie, dass alle Kommentare gemäß unserer Datenschutzrichtlinie moderiert werden und alle Links nofollow sind. Verwenden Sie KEINE Schlüsselwörter im Namensfeld. Lassen Sie uns ein persönliches und bedeutungsvolles Gespräch führen.

WordPress Launch Checkliste

Die ultimative Checkliste für den Start von WordPress

Wir haben alle wichtigen Checklistenpunkte für den Start Ihrer nächsten WordPress-Website in einem praktischen E-Book zusammengefasst.
Ja, senden Sie mir das kostenlose E-Book!