Ordina i post (in tutto il sito) per data dei metadati


8

La mia pagina 'Home' personalizzata è impostata per ordinare i miei post personalizzati tramite il campo data personalizzato con questo codice (aggiornato per essere personalizzato) in funzioni.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;
    }
}



}

Che è dandy e semplice. Adesso. Voglio che funzioni su tutto il sito. Voglio che i post su pagine di archivio, categorie ecc. Vengano ordinati per primi in base al campo data personalizzato.

Qualche idea?

Ho provato a cambiare il " if" is_archive()ma quello non ha avuto effetto. Ci ho provato <! is_single()>anche io .

Sono sicuro che dovrebbe essere qualcosa di semplice. Ma sono nuovo di php e quindi all'oscuro.

Ecco il sito , dove puoi vedere la home page ben ordinata, ma se fai clic su "poesia" (l'unica con pochi post), l'ordinamento non funziona.

Ogni suggerimento sarà accolto con molta gioia.

Grazie gentilmente.


Dovresti aggiungere il prefisso a tutte le tue funzioni per es. josh_per evitare colisioni di denominazione.
Kaiser

Vuoi dire che come buona pratica o per risolvere questo? Ho provato a copiare di nuovo il codice per 'is_archive' e mi ha fatto richiamare di nuovo la funzione, ma l'ordinamento non ha funzionato ...
josh

1
Sì, è una buona pratica. Inoltre: non dovresti avvolgere le funzioni nelle funzioni.
Kaiser

cool, cool (ho appena copiato il codice da un sito Web, tbh. Sono nuovo di php e wordpress). Qualche anticipo su come farlo funzionare attraverso il sito? Ho funzionato con più pagine personalizzate e la stessa funzione impostata su (is_page ()), ma questo non fa nulla per le mie pagine di archivio. Non ho idea di come risolverli ...
Josh

1
Invece di mettere le funzioni nelle funzioni, prova invece a usare una classe.
Manny Fleurmond,

Risposte:



0

Perché non usi 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();

Puoi anche modificare la query usando l'hook pre_get_posts e fare l'ordinamento condizionale lì con is_archive (), is_page () ecc ...


0

Sto guardando anche l' altra tua domanda .

Se desideri ordinare in base al meta-valore della data, questi devono essere naturalmente nello stesso formato - Immagino sia il formato della data ('m-y') di PHP come hai specificato nel tuo codice lì?

In tal caso, potresti scoprire che se cambi il tuo meta_valuecodice per meta_value_numottenere un risultato migliore?

Non sono sicuro che funzionerà, ma potrebbe valere la pena provarlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.