Por que minhas postagens não estão sendo exibidas?

2

Estou criando um tema para o site do meu portfólio. Depois de algum tempo de tentativa e erro de pesquisa e quase, estou preso.

Será um site muito minimalista, portanto decidi criar um site de uma página. Estou usando get_pages($args); para exibir cada página no meu arquivo front-page.php.

Isso funciona muito bem. Agora aqui é onde eu estou preso ... Eu gostaria de usar uma página para exibir meus posts, que seriam incluídos no meu fluxo de uma página e seriam chamados na minha WP_Query mesmo que as outras páginas.

Até agora eu tentei o método mais documentado que posso encontrar; que é para alterar a página usada para exibir postagens em Configurações > Leitura.

Para confirmar

Eu tenho uma página inicial estática (front-page.php) que eu fiz um modelo de página declarou em uma página chamada home. Habilitando-me a defini-lo nas configurações de leitura, e criei uma página chamada blog pela mesma razão (isso tem o template definido como defualt).

Minhaspostagensnãoestãosendocarregadasnapáginadoblogdefinidaaqui.

Euliqueumaconsultapersonalizadapodeestarinterferindo,maseuverifiqueiissoenãoéocasonaminhasituação.

AtualizadoparausarWP_Query,emvezdeget_pages

front-page.php

<?php$args=array('post_type'=>'page','order'=>'ASC','orderby'=>'menu_order','posts_per_page'=>5,);$query=newWP_Query($args);if($query->have_posts()){while($query->have_posts()){$query->the_post();?><adata-magellan-destination="<?php echo $post->post_name; ?>" name='<?php echo $post->post_name; ?>'></a>
                <div id="<?php echo $post->post_name; ?>" class="page-wrap full">
                    <h2><?php the_title() ?></h2>
                        <?php the_content() ?>
                </div>

            <?php }
        } else {
    }

        wp_reset_postdata();
    ?>

Alguém já se deparou com esse tipo de situação antes? Ou estou faltando alguma coisa com o meu loop que impediria o carregamento do post do blog. Estou aprendendo php e WordPress e atingi meu limite de experiência. Eu acho que a chamada para o conteúdo da própria página do blog está impedindo a publicação das informações do post? Não tenho certeza. Qualquer orientação seria apreciada.

Obrigado antecipadamente

    
por JohnMcCarthy 23.08.2014 / 22:12

3 respostas

6

Isso não funciona do jeito que você pensa, porque get_pages não faz o que você acha que faz.

Primeiro, entenda que todas as páginas, todo o conteúdo, no WordPress, são realmente um "post". Uma "Página" é apenas um tipo especial de postagem.

Agora, em um ambiente normal, você não chamaria "get_" de nada. É por isso que você está confuso, porque está obtendo coisas diretamente e ignorando tudo o que o WordPress faz automaticamente para você. Quando você chama get_pages, ele recebe essas páginas diretamente. Ele não leva em conta a configuração "home page estática", simplesmente faz o que é dito e obtém o conteúdo dessas páginas.

Veja, o WordPress analisa automaticamente o URL e determina o que deve ser exibido nesse URL. Isso acontece de acordo com o sistema de reescrita. As regras de reconfiguração transformam uma URL "bonita" em uma série de parâmetros para o sistema WP_Query. O sistema WP_Query extrai os posts a serem exibidos e os salva em um $ wp_query global. O sistema de modelo, em seguida, determina qual modelo para extrair do tema com base nos vários dados em que WP_Query global e, em seguida, carrega esse modelo. O modelo implementa o Loop, que exibe as postagens contidas no global $ wp_query.

Então, para resumir:

  • URL é processado por reescrevemos
  • Rewrites cria parâmetros de consulta
  • Parâmetros de consulta usados para determinar as postagens para obter
  • O sistema de modelos examina a consulta para carregar o modelo adequado
  • Modelo adequado exibe as postagens da consulta

Cada passo aqui acontece sozinho. Você realmente não controla isso, é apenas o que o WordPress faz na inicialização.

A configuração "Static Home Page" modifica a etapa três, onde a consulta está obtendo a "home page", tem a opção de obter as postagens do blog ou obter alguma página estática. Da mesma forma, quando você diz para obter uma página específica, se essa página estiver configurada para ser o blog, a consulta fará com que as postagens sejam exibidas lá. Tudo o resto acontece normalmente.

Ao fazer o get_pages você mesmo, você está contornando tudo aqui e apenas dizendo para obter essas páginas e exibi-las, ponto final. Nada mais no sistema terá impacto porque você ignorou tudo.

Se você quiser exibir tudo em uma única página, precisará ter exatamente o que deseja exibir e exibi-lo. Resumidamente, "Página inicial estática" não faz com que as páginas tenham conteúdo diferente, apenas altera o conteúdo escolhido pela consulta para exibir nessas páginas específicas. Se você deseja obter as postagens, precisará chamar get_posts de alguma forma, ou usar uma WP_Query personalizada ou modificar a consulta principal ou qualquer outra coisa. A função get_pages () não pode realmente recuperar as postagens do blog. Bem, pode, mas não faz sentido, já que get_posts () faz isso.

    
por Otto 24.08.2014 / 02:26
2

Antes de começar, recomendo que você leia: Criando uma página inicial estática

OK, quando você seleciona uma página frontal estática, um dos seguintes modelos é usado para exibir a página inicial

  • front-page.php

  • page.php

  • qualquer outro modelo de página personalizado

Esta é a parte que você já tem trabalhando com o que eu posso entender da sua pergunta

Agora, a página do blog. O Wordpress trata a página como página do blog como sua página inicial, e acho que aqui você está preso. O Wordpress procura automaticamente por um modelo chamado home.php e, se esse modelo não for encontrado, o Wordpress usará index.php. Seu blog.php é simplesmente ignorado. Como index.php e home.php são apenas configurados para o tipo de postagem post , você não recebe nada quando visita a página do seu blog

Você precisa alterar a consulta principal antes de executá-la para incluir page como um tipo de postagem na página do seu blog usando pre_get_posts . Não crie uma consulta personalizada para fazer alterações na home page ou em qualquer página de arquivo, pois elas são problemáticas, especialmente quando se trata de paginação. Você pode simplesmente adicionar o seguinte ao seu functions.php. Tome nota, o is_home() check é usado para alterar apenas a consulta principal na home page, que é a sua página do blog

function include_page_in_home( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'post_type', array( 'post', 'page' ) ); // Remove post if you only need page
    }
}
add_action( 'pre_get_posts', 'include_page_in_home' );

Para obter mais parâmetros, confira WP_Query , pois ambos usam os mesmos parâmetros. Apenas certifique-se de estar usando o loop padrão em home.php ou index.php.

Apenas para informações, use o seguinte em seu functions.php ao desenvolver, não use em um site de produção. Isso imprimirá o modelo atual que está sendo usado na seção principal da página, se você não tiver certeza de qual modelo está sendo usado por uma página específica

add_action('wp_head', 'show_template');
function show_template() {
    global $template;
    print_r($template);
}

Para estender a resposta de @Otto, você pode usar o seguinte em seu front-page.php para exibir suas páginas. Esta é apenas uma versão copiada do códice que você pode ajustar conforme necessário

<?php

// The Query
$the_query = new WP_Query( 'posts_per_page=-1&post_type=page' );

// The Loop
if ( $the_query->have_posts() ) {
    echo '<ul>';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
    echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();

Recursos adicionais

EDITAR

Se você precisar mostrar as três últimas postagens do seu blog no front-page.php, basta fazer isso com uma consulta personalizada, algo assim

<?php

// The Query
$the_query = new WP_Query( 'posts_per_page=3&order=DESC' );

// The Loop
if ( $the_query->have_posts() ) {
    echo '<ul>';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
    echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
    
por Pieter Goosen 24.08.2014 / 09:30
-1

Sem ver seu arquivo front-page.php, aqui está o que eu sugiro se você estiver usando uma página de postagens de "Blog". Crie um modelo de página personalizado para sua página do Blog. Isso é feito da mesma maneira que o front-page.php, exceto por 2 coisas ...

  1. Você precisará colocar o seguinte comentário no topo do seu arquivo blog.php (se é assim que você vai chamá-lo.

    / * Nome do modelo: Blog * /

  2. Edite a página do blog no painel e selecione Blog como modelo.

Ou você pode criar um arquivo de modelo chamado page-blog.php e não precisará se preocupar em selecionar um arquivo de modelo no painel.

Em seguida, no seu modelo de página, execute seu loop de postagens para pegar qualquer conteúdo desejado e exibi-lo da maneira que quiser. Eu não sei exatamente o conteúdo que você quer ou como você quer que seja exibido ou eu arranho algo para você.

Mais uma vez, essa é a minha melhor resposta depois de não ver o seu arquivo front-page.php. Deixe-me saber se isso ajuda!

    
por Will S. 23.08.2014 / 22:25