Ma page d'accueil personnalisée est configurée pour trier mes messages personnalisés via le champ de date personnalisé avec ce code (mis à jour pour être personnalisé) dans functions.php:
// 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;
}
}
}
Ce qui est dandy et simple. Maintenant. Je veux que cela fonctionne sur l'ensemble du site. Je veux que les messages sur les pages d'archives, les catégories, etc. soient d'abord triés par le champ de date personnalisé.
Des idées?
J'ai essayé de changer le ' if
' en is_archive()
mais cela n'a eu aucun effet. J'ai essayé <! is_single()>
aussi.
Je suis sûr que ce devrait être quelque chose de simple. Mais je suis nouveau sur php et donc désemparé.
Voici le site , où vous pouvez voir que la page d'accueil est bien triée, mais si vous cliquez sur «poésie» (la seule avec quelques messages), le tri ne fonctionne pas.
Toutes les suggestions seront satisfaites avec beaucoup de joie.
Merci de bien vouloir.
josh_
pour éviter de nommer les colisions.Réponses:
Utilisez le filtre de demande
query_vars
ou pour ajouter si n'est pas présenté dans la chaîne de requêteorderby
orderby
la source
request
suggestion de filtreis_archive()
et se ressembler si tôt dans le processus.Pourquoi n'utilisez-vous pas query_posts ()?
Vous pouvez également modifier la requête à l'aide du crochet pre_get_posts et y effectuer votre tri conditionnel avec is_archive (), is_page () etc ...
la source
Je regarde aussi votre autre question .
Si vous souhaitez trier par la méta-valeur de date, ils doivent naturellement être au même format - je suppose que c'est le format de date ('m-y') de PHP comme vous l'avez spécifié dans votre code là-bas?
Si tel est le cas, vous constaterez peut-être que si vous changez votre
meta_value
dans ce code pourmeta_value_num
obtenir un meilleur résultat?Je ne sais pas si cela fonctionnera, mais cela pourrait valoir la peine d'essayer.
la source