it-swarm.com.de

Ordnen Sie Posts (auf der gesamten Site) nach Metadaten-Datum

Meine benutzerdefinierte "Startseite" ist so eingestellt, dass meine benutzerdefinierten Beiträge über das Feld "Benutzerdefiniertes Datum" mit dem folgenden (benutzerdefinierten) Code in functions.php sortiert werden:

// sort order for home page
add_action('wp', 'wwgo_check_page');
function wwgo_check_page () {
if (is_page()) {
    add_filter('get_previous_post_sort', 'sort_it');
    add_filter('get_next_post_sort', 'sort_it');
    add_filter('posts_orderby', 'sort_it' );
    add_filter('posts_join', 'join_it' );
    add_filter('posts_where', 'where_it' );

    function sort_it () {
        global $wpdb;

        return " $wpdb->postmeta.meta_value ASC ";
    }

    function join_it( $join ) {
        global $wpdb;

        $join .= " LEFT JOIN $wpdb->postmeta ON($wpdb->posts.ID = $wpdb->postmeta.post_id) ";

      return $join;
    }

    function where_it( $where ) {
        global $wpdb;
        $where .= "AND $wpdb->postmeta.meta_key = 'deadline' ";

      return $where;
    }
}



}

Welches ist dandy und einfach. Jetzt. Ich möchte, dass dies auf der gesamten Website funktioniert. Ich möchte, dass Beiträge auf Archivseiten, Kategorien usw. zuerst nach dem benutzerdefinierten Datumsfeld sortiert werden.

Irgendwelche Ideen?

Ich habe versucht, die 'if' in is_archive() zu ändern, aber das hatte keine Auswirkung. Ich habe auch <! is_single()> ausprobiert.

Ich bin sicher, es sollte etwas Einfaches sein. Aber ich bin neu in PHP und daher ahnungslos.

Hier ist die Seite , auf der Sie sehen können, dass die Startseite schön sortiert ist, aber wenn Sie auf "Poesie" klicken (die einzige mit ein paar Beiträgen) Das Sortieren funktioniert nicht.

Anregungen werden mit viel Freude aufgenommen.

Dankesehr.

8
josh

Verwenden Sie den Anforderungsfilter query_vars oder , um orderby hinzuzufügen, wenn orderby nicht in der Abfragezeichenfolge enthalten ist

2

Ich betrachte auch Ihre andere Frage .

Wenn Sie nach dem Datums-Metawert sortieren möchten, müssen diese natürlich dasselbe Format haben - ich vermute, es ist das Datumsformat ('m-y') von PHP, das Sie dort in Ihrem Code angegeben haben?

Wenn dies der Fall ist, stellen Sie möglicherweise fest, dass Sie ein besseres Ergebnis erzielen, wenn Sie Ihren meta_value in diesem Code in meta_value_num ändern?

Ich bin mir nicht sicher, ob dies funktioniert, könnte aber einen Versuch wert sein.

0
djb

Warum benutzt du nicht query_posts ()?

<?php
query_posts('meta_key=key_name&orderby=key_name&sort=ASC');
if ( have_posts() ) : while ( have_posts() ) : the_post();

endwhile; else:

endif;

wp_reset_query();

Sie können die Abfrage auch mithilfe des Hooks pre_get_posts ändern und dort die bedingte Sortierung mit is_archive (), is_page () usw. durchführen.

0
Brian Fegter