改变 BigCommerce 的 Wordpress 目录

Altering BigCommerce's Wordpress Catalog

我想 link 我的 Wordpress 博客帖子到产品类别(以编程方式),所以我更新了 bigcommerce_product 分类法类型,使其也出现在 post 内容类型中,使用以下内容代码。

function shop_modify_bc_taxonomy() {
  $tax = 'bigcommerce_category';
  $bcArgs = get_taxonomy( $tax ); // returns an object
  $bcArgs->object_type = array_merge($bcArgs->object_type, ['post']); // Add 'post'
  register_taxonomy( $tax, $bcArgs->object_type, (array) $bcArgs );
}

// hook it up to 11 so that it overrides the original register_taxonomy function
add_action( 'init', 'shop_modify_bc_taxonomy', 20 );

然而,现在,当帖子与术语相关联时,它们会显示在产品目录中。

如果我在函数中添加以下行 BigCommerce\Templates\Product_Archive::get_posts() 我的问题就解决了:

private function get_posts( \WP_Query $query ) {
    $cards = [];
    while ( $query->have_posts() ) {
      $query->the_post();
      
      // Add this line
      if (get_post_type() !== 'bigcommerce_product') {  continue;  }

      $product = new Product( get_the_ID() );
      $card    = Product_Card::factory( [
        Product_Card::PRODUCT => $product,
      ] );
      $cards[] = $card->render();
    }
    wp_reset_query();

    return $cards;
  }

但我不知道如何覆盖这个 class。我可以加入 WP_Query 吗?

使用 pre_get_posts,我们可以在主题的 function.php 文件

中将 post_type 限制为 Big Commerce 产品
function edit_bigcommerce_queries( $query ) {
    if ( ! is_admin() && $query->is_main_query() ) {

        // Is a BigCommerce Category Page
        if ( !empty( $query->query['bigcommerce_category']) {

            $query->set( 'post_type', 'bigcommerce_product');
        }
    }
}
add_action( 'pre_get_posts', 'edit_bigcommerce_queries' );