Cum să filtrezi tipurile de postări personalizate după taxonomia de categorii personalizate

14 oct. 2016, 19:47:04
Vizualizări: 41.2K
Voturi: 4

Folosesc WordPress 4.6.1 și încerc să învăț cum să filtrez tipurile de postări personalizate după un proces de taxonomie pentru categorii. Acest lucru este foarte util deoarece persoanele non-tehnice pot filtra ușor postările de tip personalizat după categorie în panoul de administrare.

Aceasta este configurația mea...

  1. Construiesc o temă copil bazată pe twentysixteen

  2. Am creat și înregistrat un tip de postare personalizat în fișierul functions.php al temei copil astfel...

    add_action('init','prowp_register_my_post_types');
    function prowp_register_my_post_types() {
        register_post_type('products',
        array(
            'labels' => array (
                'name' => 'Products',
                'singular_name' => 'Product', 
                'add_new' => 'Add New Product',
                'add_new_item' => 'Add New Product',
                'edit_item' => 'Edit this Product',
                'new_item' => 'New Product',
                'all_items' => 'All My Products'
            ),
            'public' => true,
            'show_ui' => true,
            'taxonomies'  => array ( 
                'category' 
            ),
            'supports' =>  array (
                'title', 
                'revisions', 
                'editor', 
                'thumbnail', 
                'page-attributes', 
                'custom-fields')
        ));
    }
    
  3. Acum folosesc tipul de postare personalizat înregistrat în fișierul index.php al temei copil astfel:

    $pargs = array(
            'post_per_page' => '-1',
            'post_type' => 'products',
            'tax_query' => array(
                'taxonomy' => 'category',
                'field'    => 'slug',
                'terms' => 'Specials'
            )
        );
        $myProducts = new WP_Query($pargs);
        while ( $myProducts->have_posts() ) : $myProducts->the_post();
            get_template_part('template-parts/products',get_post_format());
        endwhile;
        rewind_posts();
        wp_reset_postdata();
    
  4. În final, din wp-admin, am creat apoi postările pentru tipul de postare personalizat și am atribuit categoria "Specials" la "una" dintre postările mele. Celelalte sunt necategorizate. Și fiecare pagină este publicată.

...Dar din anumite motive, pagina mea din browser listează toate postările din acest tip de postare personalizat, și nu doar pe cele din Specials. Fac ceva greșit?

0
Toate răspunsurile la întrebare 2
2

Faci o mică greșeală în $pargs-ul tău

Conform documentației

Notă importantă: tax_query primește un array de array-uri cu argumente pentru taxonomii (primește un array de array-uri). De asemenea, ai folosit "post_per_page" în loc de "posts_per_page"

$pargs = array(
    'posts_per_page' => '-1',
    'post_type' => 'products',
    'tax_query' => array(
        array(
            'taxonomy' => 'category',
            'field'    => 'slug',
            'terms' => 'specials'
        )
    )
)
14 oct. 2016 20:49:51
Comentarii

haha - întotdeauna este ceva atât de simplu care este trecut cu vederea! Mulțumesc mult!!

klewis klewis
14 oct. 2016 20:54:55

@blackhawk ... da, se întâmplă la toată lumea !! :)

Anish Anish
14 oct. 2016 20:58:56
0

Puteți încerca cu următoarele coduri:

$terms = wp_get_post_terms( $post->ID, array('category') );
$term_slugs = wp_list_pluck( $terms, 'slug' );    
$args = array(
        'post_per_page' => '-1',
        'post_type' => array( 'products' ), 
            'tax_query' => array(
                array(
                'taxonomy' => 'category',
                'field' => 'slug',
                'terms' => $term_slugs
                )  
    );


    $my_query = null;
    $my_query = new WP_Query($args);
14 oct. 2016 20:44:42