質問: get_posts( $args ); echo var_dump($products); $products配列をデバッグすると常に0が返されます。これは、id 47のカテゴリの下にいくつかの製品があることがわかっているため、間違っています。コードを修正する方法を教えてください。
回答: 私は、主な問題はget_posts()ではなくwp_queryオブジェクトを使うべきだと思います。後者はデフォルトでpost_typeがpostの商品のみを返します。そのため、idが26のカテゴリを指定すると、次のコードはその商品を返します(woocommerce 3+)。 $args = array( 'post_type' => 'product', 'post_status' => 'publish', 'ignore_sticky_posts' => 1, 'posts_per_page' => '12', 'tax_query' => array( array( 'taxonomy' => 'product_cat', 'field' => 'term_id', //this is optional, as it defaults to 'term_id' 'terms' => 26, 'operator' => 'in' // possible values are 'in', 'not in', 'and'. ), array( 'taxonomy' => 'product_visibility', 'field' => 'slug', 'terms' => 'exclude-from-catalog', // possibly 'exclude-from-search' too 'operator' => 'not in' ) ) ); $products = new wp_query($args); var_dump($products); woocommerceの以前のバージョンでは、可視性はメタフィールドとして保存されていたので、コードは次のようになります。 $args = array( 'post_type' => 'product', 'post_status' => 'publish', 'ignore_sticky_posts' => 1, 'posts_per_page' => '12', 'meta_query' => array( array( 'key' => '_visibility', 'value' => array('catalog', 'visible'), 'compare' => 'in' ) ), 'tax_query' => array( array( 'taxonomy' => 'product_cat', 'field' => 'term_id', //this is optional, as it defaults to 'term_id' 'terms' => 26, 'operator' => 'in' // possible values are 'in', 'not in', 'and'. ) ) ); $products = new wp_query($args); var_dump($products); ここでは、1ページあたり12個の表示可能な商品のみが返されています。 http://codex.wordpress.org/class_reference/wp_query#taxonomy_parametersを見てください カテゴリターゲティングがどのように機能するかについての詳細は - /idによるよりもslugでそれを取得する方が便利です!