-1

基本的に、投稿タイプ「製品」と分類 (「product_cat」) があり、この投稿タイプの単一のビューでWP_Query、次の基準で投稿を一覧表示する必要があります。

  • 1 ページあたり 3 つの投稿
  • 「商品」投稿タイプの投稿のみ
  • 現在の投稿を除外する
  • 現在の投稿に含まれる「product_cat」分類用語があります

次のクエリを使用してこれを達成しました。

global $post;

$taxonomy = 'product_cat';

$have_you_read_query = new WP_Query(
  array(
    'posts_per_page' => 3,
    'post_type' => 'product',
    'post__not_in' => array($post->ID),
    'tax_query' => array(
      array(
        'taxonomy' => $taxonomy,
        'field' => 'slug',
        'terms' => m_explode(get_terms($taxonomy), 'slug')
      )
    )
  )
);

m_explode関数が何をするのか疑問に思っている場合は、次のとおりです。

function m_explode(array $array, $key = '') {
  if( !is_array($array) or $key == '') return;
  $output = array();
  foreach( $array as $v ) {
    if( !is_object($v) ) {
      return;
    }
    $output[] = $v->$key;
  }
  return $output;
}

私がこれで抱えている唯一の問題は、「product_cat」用語が添付されている投稿がまったくない場合、次のエラーが発生することです:

Notice: Undefined offset: 0 in C:\Users\Tom\Dropbox\Localhost\wordpress\wp-includes\query.php on line 2473

この問題は私を困惑させました、それは実際には大きな問題ではありませんが、それは私を本当に悩ませているので、誰かが何か考えを持っていれば大歓迎です. 乾杯!

4

2 に答える 2

1

誰かがそれを必要とする場合に備えて、これを最後に並べ替えました。これが私が最終的に使用したものです。

<?php
  global $post;

  $taxonomy = 'product_cat';

  $terms = get_the_terms($post->ID, $taxonomy);
?>

<?php if ($terms && ! is_wp_error($terms)) : ?>

  <?php
    $terms_array = array();

    foreach ($terms as $term) {
      $terms_array[] = $term->slug;
    }

    $have_you_read_query = new WP_Query(
      array(
        'posts_per_page' => 3,
        'post_type' => 'product',
        'post__not_in' => array($post->ID),
        'tax_query' => array(
          array(
            'taxonomy' => $taxonomy,
            'field' => 'slug',
            'terms' => $terms_array
          )
        )
      )
    );
  ?>

  <?php if($have_you_read_query->have_posts()) : ?>

    <ul>
      <?php while($have_you_read_query->have_posts()) : $have_you_read_query->the_post(); ?>

        <li>
          <?php the_title(); ?>
        </li>

      <?php endwhile; wp_reset_postdata(); ?>
    </ul>

  <?php endif; ?>

<?php endif; ?>
于 2013-11-15T16:51:05.597 に答える