Як я можу запитати користувальницький тип публікації із власною систематикою?


26

Чомусь мені здається, що я намагаюся захопити будь-які повідомлення за допомогою власної таксономії ... чи може хтось розгадати мою дурість?

 $args = array(
    'post_type' => 'adverts',
    'advert_tag' => 'politics' // Doesn't seem to work.
  );

query_posts($args); 

while ( have_posts() ) : the_post();
 //Show Posts
endwhile;

Декларація таксономії:

add_action( 'init', 'add_custom_taxonomy', 0 );
function add_custom_taxonomy() {
register_taxonomy('advert_tag', 'Adverts', array(
  'hierarchical' => true,
  'labels' => array(
    'name' => _x( 'Advert Tags', 'taxonomy general name' ),
    'singular_name' => _x( 'Advert Tag', 'taxonomy singular name' ),
    'search_items' =>  __( 'Search Advert Tags' ),
    'all_items' => __( 'All Advert Tags' ),
    'parent_item' => __( 'Parent Advert Tag' ),
    'parent_item_colon' => __( 'Parent Advert Tag:' ),
    'edit_item' => __( 'Edit Advert Tag' ),
    'update_item' => __( 'Update Advert Tag' ),
    'add_new_item' => __( 'Add New Advert Tag' ),
    'new_item_name' => __( 'New Advert Tag Name' ),
    'menu_name' => __( 'Advert Tags' ),
  ),
  'rewrite' => array(
    'slug' => 'advert-tags',
    'with_front' => false,
    'hierarchical' => true
  ),
));
  }

Спеціальна декларація про тип пошти:

  add_action( 'init', 'create_post_type' );
  function create_post_type() {
    register_post_type( 'Adverts',
    array(
        'labels' => array(
            'name' => __( 'Adverts' ),
            'singular_name' => __( 'Advert'),
            'add_new' => __( 'Add New' ),
            'add_new_item' => __( 'Add a New Advert' ),
            'edit' => __( 'Edit' ),
            'edit_item' => __( 'Edit Advert' ),
            'new_item' => __( 'New Advert' ),
            'view' => __( 'View' ),
            'view_item' => __( 'View Advert' ),
            'search_items' => __( 'Search Adverts' ),
            'not_found' => __( 'No Adverts found' ),
            'not_found_in_trash' => __( 'No Adverts found in Trash' ),
            ),
        'supports' => array(
                'title',
                'thumbnail',
            ),
        'has_archive' => true,
        'menu_position' => 10,
        'public' => true,
        'rewrite' => array( 'slug' => 'adverts' ),
        'taxonomies' => array('advert_tag')
    )
);

}

Відповіді:


37

Ялинки всіх не використовуються query_posts()ніколи , читайте більше про це тут: Коли вам слід використовувати WP_Query vs query_posts () vs get_posts ()? .

Ви повинні використовувати WP_Queryдля отримання публікацій те, що вам потрібно. Прочитайте документацію на це. У вашому випадку запит може бути таким:

$the_query = new WP_Query( array(
    'post_type' => 'Adverts',
    'tax_query' => array(
        array (
            'taxonomy' => 'advert_tag',
            'field' => 'slug',
            'terms' => 'politics',
        )
    ),
) );

while ( $the_query->have_posts() ) :
    $the_query->the_post();
    // Show Posts ...
endwhile;

/* Restore original Post Data 
 * NB: Because we are using new WP_Query we aren't stomping on the 
 * original $wp_query and it does not need to be reset.
*/
wp_reset_postdata();

2
Щойно зауважив, що, здається, перетягуються всі повідомлення зі спеціальним типом публікації "Оголошення". Однак це, здається, виконує роботу: $ the_query = new WP_Query (масив ('post_type' => 'Оголошення', 'advert_tag' => 'Політика'));
Стівен

@Stephen {tax} було знято з моменту версії 3.1 на користь {tax_query} і {tax_query}. це все ще працює, але ми не повинні використовувати застарілі функції. tax_query використовується з масивом запитів таксономії. я працював над типовими питаннями користувальницького типу "Повідомлення", і він працював для мене майже так само, як і аргумент слугу {tax} таксономії в WP_Query.
Аамер Шахзад

16

Я використовую цей запит, щоб отримати спеціальні повідомлення (FAQs Posts) з його власною систематикою (faq_category). оскільки параметр {taxonomy} у аргументах WP_Query був знятий з версії 1.3 і введений {tax_query}. нижче - код, який ідеально працює.

$query = new WP_Query( array(
    'post_type' => 'faqs',          // name of post type.
    'tax_query' => array(
        array(
            'taxonomy' => 'faq_category',   // taxonomy name
            'field' => 'term_id',           // term_id, slug or name
            'terms' => 48,                  // term id, term slug or term name
        )
    )
) );

while ( $query->have_posts() ) : $query->the_post();
    // do stuff here....
endwhile;

/**
 * reset the orignal query
 * we should use this to reset wp_query
 */
wp_reset_query();

Це правильна відповідь - прийнята відповідь не буде фільтруватися за систематикою, оскільки tax_query вимагає масиву масивів. Цей вкладений метод має важливе значення для роботи цього. Дякую за вашу відповідь)
Том Дайер

так, ти маєш рацію, вітаємо Тома Дайєра
Аамер Шахзад

Так, цей також допоміг мені запрацювати шаблон таксономії. Дякую!
користувач3135691

Привіт, @AamerShahzad У мене точно таке запитання, і я використав вашу відповідь, але на сторінці немає публікацій. Ви можете мені тут допомогти? stackoverflow.com/questions/55783769/…
Дезі

-1

Ця відповідь зараз вже не дійсна, оскільки wordpress змінює інформацію про параметри таксономії. будь ласка, використовуйте цей спосіб. Це спрацює. Це працює для мене. "tax_query" заміняється на "tax". сподіваюся, що це спрацює.

$the_query = new WP_Query( array(
    'post_type' => 'Adverts',
    'tax' => array(
        array (
            'taxonomy' => 'advert_tag',
            'field' => 'slug',
            'terms' => 'politics',
        )
    ),
) );

while ( $the_query->have_posts() ) :
    $the_query->the_post();
    // Show Posts ...
endwhile;

/* Restore original Post Data 
 * NB: Because we are using new WP_Query we aren't stomping on the 
 * original $wp_query and it does not need to be reset.
*/
wp_reset_postdata();

Це якраз навпаки - taxбув старий шлях, чи tax_queryє поточний (v3.1 +) спосіб.
WebElaine

Ну я працюю v4.5, і це працює зі мною
mamunuzaman

WP відомий тим, що сумісний із зворотним ходом. Старий спосіб як і раніше працює, але його застаріло, тому його згодом можна буде видалити і безпечніше використовувати новіший метод.
WebElaine
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.