Tipo de taxonomia de tipo de postagem personalizada de consulta com base na página

4

Eu tenho um tipo de postagem personalizada chamado books . Esse tipo de postagem personalizada tem uma taxonomia chamada book_category . A partir de agora, e no futuro previsível, existem 5 categorias em que cada livro pode ser filtrado.

Agora, cada uma dessas categorias tem sua própria página que consultará os livros com base na respectiva categoria (entre outras informações auxiliares pertencentes a cada categoria).

No meu código abaixo, fiz uma tentativa de consultar postagens com base em is_page() . Enquanto isso funciona ... algo está me dizendo que há uma maneira mais eficiente / adequada de lidar com isso.

<?php
if (is_page('horror')) {
  $theTermBasedOnPage = 'horror';
} elseif (is_page('comedy')) {
  $theTermBasedOnPage = 'comedy';
} elseif (is_page('romantic')) {
  $theTermBasedOnPage = 'romantic';
} elseif (is_page('nonfiction')) {
  $theTermBasedOnPage = 'nonfiction';
} elseif (is_page('drama')) {
  $theTermBasedOnPage = 'drama';
}

$args = array(
  'posts_per_page' => -1,
  'post_type' => 'books',
  'post_status' => 'publish',
  'tax_query' => array(
      array(
          'taxonomy' => 'book_category',

          'terms' => $theTermBasedOnPage,
      ),
  ),
  );
?>

Qual é a melhor maneira de consultar postagens (tipo de postagem personalizada > Taxonomia) com base na página?

    
por Joe 08.08.2018 / 22:08

3 respostas

3

Para tornar isso mais eficiente, em vez de discutir o slug da página atual, basta colocar o slug atual como o valor dos termos do tax_query. Algo como:

global $post;
$args = array(
  'posts_per_page' => -1,
  'post_type' => 'books',
  'post_status' => 'publish',
  'tax_query' => array(
      array(
          'taxonomy' => 'book_category',
          'field'    => 'slug',
          'terms'    => $post->post_name, // which'd be 'horror' or 'comedy', etc
      ),
  ),
);

Note que há alta probabilidade de erro humano fazendo as coisas desta forma: por exemplo, ter uma página de nonfiction , mas um termo book_category de non-fiction poderia quebrar a lógica e causar problemas.

Eu não sei o contexto do que você está trabalhando, mas se o objetivo é apenas "cada uma dessas categorias tem sua própria página" você não precisa criar esse costume -query-with-manual-page-relation para cada termo. As taxonomias e os termos do WordPress terão seus próprios URLs se você tiver registrado a taxonomia como public e publicly_queryable . (Adivinhando aqui, mas) Você provavelmente pode visitar your-site.com/book_category/horror/ e ver a lista de livros de terror. Você pode personalizar os arquivos de modelo para todos os termos ou individualmente usando a hierarquia de modelos do WordPress como referência.

    
por David Sword 08.08.2018 / 22:16
2

Páginas de taxonomia personalizadas:

Você não precisa criar uma consulta personalizada com $args para obter as páginas de taxonomia personalizadas. Você pode simplesmente seguir a estrutura de URL fornecida pelo WordPress para isso.

Por exemplo, digamos:

  1. Você selecionou a seguinte Estrutura Permalink:

  2. EntãovocêcriouumtipodepostagempersonalizadoBook

  3. CriadaumataxonomiapersonalizadaBookCategoryevinculadaaBook.

  4. Emseguida,criouumnovoBookintituladoMyHorrorStoryemHorrorasBookCategory.

  5. E,criououtronovoBookintituladoMyComedyStorysobComedycomoBookCategory.

Comtodasasoutrasconfiguraçõespadrão,oWordPressgeraráautomaticamenteosseguintesURLsparavocê:

//BookLinkshttps://example.com/book/my-comedy-story/https://example.com/book/my-horror-story///BookCategoryLinkshttps://example.com/book-category/comedy/https://example.com/book-category/horror/

UseessesURLsparasuaspáginasdetaxonomiapersonalizadasdesejadas.

Modelo

Alémdisso,vocêpodeeditarosarquivosdemodelodetemaparacriarodesigndesejado.Confiraa Hierarquia de modelos do WordPress para aprender como fazer isso.

Por exemplo, você pode criar um arquivo de modelo chamado taxonomy-book-category.php para projetar Book Category páginas de taxonomia personalizadas.

Nesse arquivo de modelo, use as Tags de modelo do WordPress e The Loop para consultas necessárias.

Por exemplo, um arquivo de modelo muito simples pode ser assim:

<?php
    if ( have_posts() ) : while ( have_posts() ) : the_post();
        the_content();
    endwhile;
    else :
        _e( 'Sorry, no book matched your criteria.', 'textdomain' );
    endif;
?>
    
por Scott 08.08.2018 / 22:53
0

Tente isto:

<?php
// Get post's all terms.
$terms = wp_get_post_terms( get_the_ID(), 'book_category' );

// Get first term ID
$currentPostTermID = $terms[ 0 ]->term_id;

$args = array(
    'posts_per_page' => -1,
    'post_type'      => 'books',
    'post_status'    => 'publish',
    'tax_query'      => array(
        array(
            'taxonomy' => 'book_category',

            'terms' => $currentPostTermID,
        ),
    ),
);
?>
    
por bilimokur 08.08.2018 / 22:57