it-swarm.com.de

Wie suche ich Ereignisse zwischen zwei festgelegten Daten in WP?

Ich erstelle eine WP Site mit einer Ereignisfunktion. Die Ereignisseite wurde mit benutzerdefinierten Beitragstypen erstellt.

Ich möchte es Leuten ermöglichen, Ereignisse nach Datum zu suchen/zu filtern. Beispielsweise können sie nach allen Ereignissen suchen, die zwischen dem 2. Dezember 2011 und dem 1. März 2012 stattfinden, und Ergebnisse von Ereignissen abrufen, deren Datum zwischen Dezember und März liegt (z. B. Dezember, Januar, Februar und März).

Ich möchte wissen, wie ich am besten vorgehen kann. Irgendwelche Ideen?

Ein Beispiel dafür, was ich erreichen möchte, finden Sie unter "Ereignisse nach Datum suchen" auf dieser Seite. http://www.londontown.com/events

Wenn das nicht möglich ist, kann ich sie dann auf irgendeine Weise dazu bringen, nach Ereignissen zu suchen, die zwischen bestimmten Monaten, beispielsweise Dezember und Februar, stattfinden (ausgenommen die Tage)?

Danke im Voraus.

Es gibt zwei Dinge, die Sie tun müssen, um dies zu ermöglichen:

1) Erstellen Sie für jedes Ereignis Metadaten für die Daten

2) Fragen Sie die Posts mit meta_query ab

Für # 1 müssen Sie eine Metabox hinzufügen, mit der der Benutzer ein Datum für das Ereignis hinzufügen kann. Diese Daten sollten als Metadaten mit dem add_post_meta oder update_post_meta gespeichert werden. Ich empfehle Ihnen, Informationen zum Hinzufügen von Metadaten zu lesen, wenn Sie nicht mit der Vorgehensweise vertraut sind:

http://codex.wordpress.org/Function_Reference/add_meta_box http://www.wproots.com/complex-meta-boxes-in-wordpress/

Für # 2 können Sie den Parameter meta_query in einer neuen Instanz von WP_Query verwenden, um den entsprechenden Datumsbereich abzurufen, vorausgesetzt, Sie haben die Datumswerte in einer sortierbaren Weise gespeichert (z. B. JJJJ-MM-TT). Diese Methode setzt voraus, dass Ihr meta_key "_my-datetime-from" ist. Beispielsweise können Sie die Posts im Oktober und November 2011 wie folgt erhalten:

// Set arguments for events
$start = '2011-11-31';
$end = '2011-10-01';
$args = array(
    'post_type' => 'my-event-type',
    'posts_per_page' => -1,
    'orderby' => 'meta_value',
    'order' => 'ASC',
    'meta_key' => '_my-datetime-from',
    'meta_query' => array(
        array(
            'key' => '_my-datetime-from',
            'value' => array($start, $end),
            'compare' => 'BETWEEN',
            'type' => 'DATE'
        )
    )
);
// Make the query
$events_query = new WP_query();
$events_query->query($args);
8
tollmanz

Wie speichern Sie das Ereignisdatum: Verwenden Sie das Standardfeld post_date des Beitrags oder ein benutzerdefiniertes Metafeld?

Wenn Sie den Standard-post_date verwenden, können Sie mit dem Filter posts_where Bedingungen für die Suche wie folgt hinzufügen:

// Create a new filtering function that will add our where clause to the query
function filter_where( $where = '' ) {
    // posts for March 1 to March 15, 2010
    $where .= " AND post_date >= '2010-03-01' AND post_date < '2010-03-16'";
    return $where;
}

add_filter( 'posts_where', 'filter_where' );
$query = new WP_Query( $query_string );
remove_filter( 'posts_where', 'filter_where' );

Weitere Beispiele finden Sie im Codex .

Wenn Sie ein benutzerdefiniertes Feld verwenden, müssen Sie vermutlich Ihre eigenen benutzerdefinierten MySQL-Abfragen schreiben. Es ist ein bisschen komplizierter. Hier ist ein Beispiel:

global $wpdb;
$post_ids = $wpdb->get_col( "
    SELECT ID FROM {$wpdb->posts}
    JOIN {$wpdb->postmeta}
    WHERE ID=post_id
    AND meta_key='your_custom_meta_key'
    AND meta_value >= '2010-03-01'
    AND meta_value < '2010-03-16'
" );

foreach ( $post_ids as $post_id ) {
    $post = get_post( $post_id );
    // Do something
}
wp_reset_postdata();
2
Anh Tran