it-swarm.com.de

So erstellen Sie eine Archivseite, auf der Beiträge in einem Datumsbereich angezeigt werden

Ich versuche, ein paar Seitenvorlagen für verschiedene Seiten zu erstellen, die als Archiv dienen sollen, um Posts (tatsächlich ein benutzerdefinierter Post-Typ) in einem bestimmten Datumsbereich anzuzeigen.

Die betroffene Website ist http://memstories.com und das CPT ist "Events". Ich habe bereits einige Erwähnungen eines Threads auf WP Support ( https://wordpress.org/support/topic/show-the-posts-published-before-a-specific-date?replies=) gefunden 2 # post-1066144 ), aber ich kann es nicht zum Laufen bringen:

<?php
function filter_where($where = '') {
$where .= " AND post_date >= '1900-01-01' AND post_date <= '1949-12-31'";
return $where;
}
add_filter('posts_where', 'filter_where');
query_posts($query_string);
?>

Da es sich bei den Ereignisbeiträgen auf dieser Website ausschließlich um historische Ereignisse handelt, verwende ich das Veröffentlichungsdatum als das tatsächliche Datum, an dem ein historisches Ereignis aufgetreten ist, und gehe bis ins Jahr 1900 zurück. In der obigen Abfrage versuche ich, dies zu erreichen eine Liste von Beiträgen, die in den Zeitraum der ersten Hälfte des 20. Jahrhunderts (1900 - 1949) passen, aber ich versuche es auf jeden Fall nicht.

Ich kann wirklich nirgendwo anders mehr Informationen finden. Alle ähnlichen Fragen zu stackexchange werden mit einem Link zu genau demselben Thread (5 Jahre alt!) Im Wordpress-Support beantwortet.

Hat jemand eine Idee, wie man das schafft?

2
dbj

Das Speichern des Datums in Post-Meta ist etwas sinnvoller. Die Spalte post_date wurde nicht für Ihren Anwendungsfall entwickelt. Bei Daten vor der Unix-Epoche (1. Januar 1970) kann es zu seltsamen Ergebnissen kommen. Dann ist es nur ein einfacher meta_query, um Beiträge zwischen Daten zu laden, kein Filter erforderlich.

$start = '1900-01-01';
$end = '1949-12-31';
$args = array(
    'post_type' => 'events',
    'posts_per_page' => -1,
    'orderby' => 'meta_value',
    'order' => 'ASC',
    'meta_key' => '_event_date',
    'meta_query' => array(
        array(
            'key' => '_event_date',
            'value' => array( $start, $end ),
            'compare' => 'BETWEEN',
            'type' => 'DATE'
        )
    )
);
$events_query = new WP_query( $args );
3
Milo

Nun, WP unterdrückt möglicherweise Ihren Filter.

Nach dem WP Codex auf posts_where @: http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_where

Bestimmte Funktionen, die Posts abrufen, führen keine Filter aus, sodass die von Ihnen angehängten posts_where-Filterfunktionen die Abfrage nicht ändern. Um dies zu umgehen, setzen Sie suppress_filters in dem an die Funktion übergebenen Argumentarray auf false.

Dies ist der Code, auf den sie verweisen:

//get posts AND make sure filters are NOT suppressed
$posts = get_posts( array( 'suppress_filters' => FALSE ) );

Verwenden Sie dies bei Ihrem Aufruf von get_posts ()?

1
Sean Grant