Crie uma lista de postagens com headdings tópicos

Gostaria de usar um campo personalizado “tópico” para encomendar posts do WordPress. Isso parece bastante realizável usando

'orderby' => 'meta_value', 'meta_key' => 'topic' 

Mas eu também gostaria de ter um título de “tópico” no início de cada tópico.

tópico 1

  • publique um no tópico 1
  • publique dois no tópico 1

tópico 2

  • publique um no tópico 2
  • publique dois no tópico 2

etc …

Eu estava pensando que eu poderia ter um loop que primeiro recebe as postagens em ordem de “tópico”

exibe o “tópico” para o primeiro post e

em seguida, chama o meu templet para exibir o resto da postagem usando.

  

Eu poderia conseguir que continuasse a fazer isso para todas as postagens, mas adicione uma afirmação if que diz

“Se o ‘tópico’ for o mesmo, o tópico para a última publicação não adiciona um título de tópico antes de publicar a publicação”

Esta é a primeira vez que tentei criar algo novo no WordPress – não copiando e colando de exemplos, e estou achando muito difícil de fazer, acabei de passar 2 dias fazendo a academia de código PHP para tentar descobrir isso Eu mesmo. Mas ainda está me causando problemas (confusão completa).

Qualquer ajuda seria muito apreciada.

Solutions Collecting From Web of "Crie uma lista de postagens com headdings tópicos"

Ok, eu entendi que funcionava. Não tenho certeza se é a melhor maneira, mas pensei que gostaria de adicionar uma resposta de qualquer maneira.

Configure as informações necessárias para o loop personalizado usando $args = array Como descrito em http://codex.wordpress.org/Class_Reference/WP_Query

 $args = array( 'post_type' => 'product', 'meta_key' => 'wpcf-topic', 'orderby' => 'meta_value', 'order' => 'ASC', 'posts_per_page' => -1, 'date_query' => array( array( 'column' => 'post_date_gmt', 'after' => 'Monday 1 week ago', ), ), ); 

Eu usei isso para selecionar o tipo de publicação como produto, ordená-los por tópico em ordem crescente (ordem alfabética), defina as postagens por página para todos eles (acho que é o que é -1) e, finalmente, limitá-lo para obter apenas os produtos adicionados após “segunda-feira 1 semana atrás” usando o novo date_query introduzido no WordPress 3.7

declarou uma nova variável com nada nele

 $last_topic="" 

iniciou o ciclo personalizado com

 $loop = new WP_Query( $args ); if ( $loop->have_posts() ) { while ( $loop->have_posts() ) : $loop->the_post(); 

defina uma nova variável $ topic para o valor do meu campo personalizado usando

 $topic=(get_post_meta( get_the_ID(), 'wpcf-topic', true )); 

(Eu usei o plugin de tipos para criar um novo campo personalizado e adiciona wpcf ao início do campo meta_key, então eu preciso usar ‘wpcf-MyFieldName’ para a meta_key quando se refere ao campo personalizado)

usou um para mostrar o título apenas se o $topic não for o mesmo que $last_topic

  if ($last_topic !== $topic){ echo "

" . $topic . "

"; }

Então, depois do resto do meu modelo de loop, adicionei

  $last_topic=$topic; 

Então, o tópico e o último tópico são os mesmos e o tema não será repetido até que ele mude para algo diferente do último. Isso só faz sentido, porque eles são ordenados por tópicos, então todos os produtos em um tópico estarão no mesmo lugar.

Fechei o loop com

  endwhile; wp_reset_postdata(); // resets the loop back to the standard WordPress loop } else { echo __( 'No products found' ); } 

Todo o código que usei está abaixo

 $args = array( 'post_type' => 'product', 'meta_key' => 'wpcf-topic', 'orderby' => 'meta_value', 'order' => 'ASC', 'posts_per_page' => -1, 'date_query' => array( array( 'column' => 'post_date_gmt', 'after' => 'Monday 1 week ago', ), ), ); $last_topic=""; $loop = new WP_Query( $args ); if ( $loop->have_posts() ) { while ( $loop->have_posts() ) : $loop->the_post(); $topic=(get_post_meta( get_the_ID(), 'wpcf-topic', true )); if ($last_topic !== $topic){ echo "

" . $topic . "

"; } woocommerce_get_template_part( 'content', 'product' ); // gets templet for product $last_topic=$topic; endwhile; wp_reset_postdata(); } else { echo __( 'No products found' ); }

O raciocínio por trás dessa maneira, ao invés de fazer um loop por cada tópico um após o outro, é que eu não quero limitar isso a um número definido por assunto, antes obter todos os novos produtos depois da segunda semana há. Eu também queria limitar o número de loops para reduzir o número de chamadas para o database. Eu ainda estou aprendendo, então não posso dizer o quanto (se for o caso) fazê-lo dessa forma acelera as coisas ou reduz a pressão no database. Mas na medida em que espero que cerca de 50 produtos por semana sejam adicionados, em cerca de 10-15 categorias, parece que seria um monte de loops por carga de página se eu tivesse um novo loop para cada tópico encontrado.

Uma coisa final. O raciocínio por trás de definir um campo personalizado para o tópico, quando parece que deveria ser uma taxonomia (na verdade, no meu caso, quase sempre faz sentido ser o mesmo que a taxonomia dos pais para o produto) é que você não pode pedir posts por taxonomia, por razões explicadas muito claramente aqui.

http://ottopress.com/2011/when-to-not-use-a-custom-taxonomy/ sem essa publicação eu nunca teria chegado tão longe em entender o que fazer.