web-dev-qa-db-fra.com

Ordre des publications (sur tout le site) par date de métadonnées

Ma page d'accueil personnalisée est configurée pour trier mes publications personnalisées via le champ de date personnalisé avec ce code (mis à jour pour être personnalisé) dans le fichier 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. À présent. Je veux que cela fonctionne sur tout le site. Je souhaite que les publications sur les pages d’archives, les catégories, etc. soient triées d’abord 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 cela devrait être quelque chose de simple. Mais je suis nouveau sur php et donc sans intelligence.

Voici le site , où vous pouvez voir que la page d'accueil est bien triée, mais si vous cliquez sur "Poésie" (le seul contenant quelques messages) , le tri ne fonctionne pas.

Toutes les suggestions seront accueillies avec beaucoup de joie.

Merci de bien vouloir.

8
josh

Utilisez le filtre query_vars ou request pour ajouter orderby si orderby n'est pas présenté dans la chaîne de requête.

2

Je regarde votre autre question aussi.

Si vous souhaitez trier les méta-valeurs de date, elles doivent naturellement être dans le même format - je suppose que c'est le format de date ('m-y') de PHP que vous avez spécifié dans votre code?

Si tel est le cas, vous constaterez que si vous modifiez votre meta_value dans ce code en meta_value_num, vous obtiendrez un meilleur résultat?

Pas sûr que ça marche, mais ça vaut le coup d'essayer.

0
djb

Pourquoi n'utilisez-vous pas 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();

Vous pouvez également modifier la requête à l'aide de hook pre_get_posts et y effectuer votre tri conditionnel avec is_archive (), is_page (), etc.

0
Brian Fegter