Solicitar postagens (em todo o site) por data de metadados

8

Minha página inicial personalizada é definida para classificar minhas postagens personalizadas por meio do campo de data personalizado com este código (atualizado para ser personalizado) em 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;
    }
}



}

O que é elegante e simples. Agora. Quero que isso funcione em todo o site. Quero que as postagens em páginas de arquivo, categorias etc. sejam classificadas primeiro pelo campo de data personalizado.

Alguma ideia?

Eu tentei mudar o ' if' para is_archive()mas isso não teve efeito. Eu <! is_single()>também tentei .

Tenho certeza que deve ser algo simples. Mas eu sou novo em php e, portanto, sem noção.

Aqui está o site , onde você pode ver a página inicial bem ordenada, mas se você clicar em 'poesia' (a única com algumas postagens), a classificação não funcionará.

Todas as sugestões serão recebidas com muita alegria.

Obrigado por favor.

Josh
fonte
Você deve prefixar todas as suas funções com por exemplo. josh_para evitar nomear colisões.
kaiser
Você quer dizer isso como boa prática ou para resolver isso? Eu tentei copiar o código novamente para 'is_archive' e ele fez deixe-me chamar a função novamente, mas a classificação não funcionou ...
josh
11
Sim, é uma boa prática. Plus: você não deve agrupar funções em funções.
kaiser
legal, legal (eu apenas copiei o código de um site, tbh. Eu sou novo em php e wordpress). Algum avanço sobre como fazer isso funcionar em todo o site? Eu tenho que trabalhar com mais páginas personalizadas e a mesma função definida como (is_page ()), mas ainda assim isso não faz nada para minhas páginas de arquivo. Eu não tenho nenhuma idéia de como corrigi-los ...
josh
11
Em vez de colocar funções em funções, tente usar uma classe.
Manny Fleurmond

Respostas:

2

Use o filtro query_varsou request para adicionar orderbyse orderbynão for apresentado na string de consulta

Maxim Krizhanovsky
fonte
1 para requestsugestão filtro
Michal Mau
@josh também verifique esta resposta wordpress.stackexchange.com/a/21378/2110 para ver como testar is_archive()e similares tão cedo no processo.
Michal Mau
filtro de solicitação foi realmente um bom grito.
josh
0

Por que você não usa 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();

Você também pode alterar a consulta usando o gancho pre_get_posts também e fazer sua classificação condicional lá com is_archive (), is_page () etc ...

Brian Fegter
fonte
0

Também estou olhando sua outra pergunta .

Se você deseja classificar pela meta-valor da data, eles devem estar naturalmente no mesmo formato - suponho que seja o formato de data do PHP ('m-y') conforme especificado no seu código?

Se for esse o caso, você poderá descobrir que, se alterar seu meta_valuecódigo para meta_value_numobter um resultado melhor?

Não tenho certeza se isso funcionará, mas pode valer a pena tentar.

djb
fonte