WordPress - возможно ли иметь два запроса в архиве. php - PullRequest
0 голосов
/ 05 апреля 2020

По какой-то причине мне нужно дважды запрашивать посты на странице архива, им нужно другое ограничение страницы.

Например, в первом запросе нужно отобразить 10 постов с некоторыми пользовательскими полями. Во втором запросе нужно отобразить 20 сообщений, которые имеют разные настраиваемые поля.

выглядит нормально, но когда я добавляю ' showposts = 10 ' для второго запроса, он отображает сообщения, но не показывает принадлежат к текущей категории.

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_field('custom-fields-1'); ?>
<?php endwhile; ?>
<?php else : ?>
<h3>Not Found</h3>
<?php endif; ?>
<?php wp_reset_query();?>

<?php query_posts('showposts=10'); if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_field('custom-fields-2'); ?>
<?php endwhile; ?>
<?php else : ?>
<h3>Not Found</h3>
<?php endif; ?>
<?php wp_reset_query();?>

1 Ответ

1 голос
/ 05 апреля 2020

Итак, вам нужно: get_queried_object Функция Get Queried Object , чтобы получить текущий идентификатор категории, а затем выполнять циклы, используя класс WP_Query вместо get_posts. Из того, что ниже, вы сможете изменить это в соответствии со своими потребностями.

  $catObject = get_queried_object();
  $category = $catObject->term_id;


  // WP_Query arguments for first loop
  $args = array(
    'posts_per_page' => '10',
    'tax_query' => array(
      array(
        'taxonomy' => 'category',
        'terms' => $category,
      ),
    ),
    'meta_query' => array(
      'relation' => 'AND',
      array(
        'key' => 'custom_field_1',
        'compare' => 'EXISTS',
      ),
    ),
  );

  // The Query
  $query = new WP_Query( $args );

  // The Loop
  if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
      $query->the_post();
      // Do your stuff with the first loop
    }
  } else {
    // no posts found
  }
  // Restore original Post Data
  wp_reset_postdata();

  // WP_Query arguments for second loop
  $args2 = array(
    'posts_per_page' => '10',
    'tax_query' => array(
      array(
        'taxonomy' => 'category',
        'terms' => $category,
      ),
    ),
    'meta_query' => array(
      'relation' => 'AND',
      array(
        'key' => 'custom_field_2',
        'compare' => 'EXISTS',
      ),
    ),
  );

  // The Query
  $query2 = new WP_Query( $args2 );

  // The Loop
  if ( $query2->have_posts() ) {
    while ( $query2->have_posts() ) {
      $query2->the_post();
      // Do your stuff with the second loop
    }
  } else {
    // no posts found
  }
  // Restore original Post Data
  wp_reset_postdata();
...