Meine benutzerdefinierte Startseite ist so eingestellt, dass meine benutzerdefinierten Beiträge über das benutzerdefinierte Datumsfeld mit diesem (in den benutzerdefinierten Namen aktualisierten) 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, das ' if
' in zu ändern , is_archive()
aber das hatte keine Auswirkung. Ich habe es auch versucht <! is_single()>
.
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 gut sortiert ist. Wenn Sie jedoch auf "Poesie" klicken (die einzige mit wenigen Beiträgen), funktioniert die Sortierung nicht.
Vorschläge werden mit großer Freude aufgenommen.
Dankesehr.
josh_
um die Benennung von Kolisionen zu vermeiden.Antworten:
Verwenden Sie den Filter
query_vars
oder request , um hinzuzufügen,orderby
ob diesorderby
nicht in der Abfragezeichenfolge enthalten istquelle
request
Filtervorschlagis_archive()
so früh im Prozess auf und ähnlich testen können.Warum benutzt du nicht query_posts ()?
Sie können die Abfrage auch mit dem Hook pre_get_posts ändern und dort Ihre bedingte Sortierung mit is_archive (), is_page () usw. durchführen.
quelle
Ich schaue auch auf deine andere Frage .
Wenn Sie nach dem Datums-Metawert sortieren möchten, müssen sie natürlich dasselbe Format haben - ich vermute, es ist das Datumsformat ('m-y') von PHP, wie Sie es in Ihrem Code dort angegeben haben?
Wenn dies der Fall ist, stellen Sie möglicherweise fest, dass Sie ein besseres Ergebnis erzielen, wenn Sie Ihren
meta_value
Code ändernmeta_value_num
.Ich bin mir nicht sicher, ob dies funktionieren wird, aber es könnte einen Versuch wert sein.
quelle