首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过自定义元字段过滤WooCommerce多站点中的产品

通过自定义元字段过滤WooCommerce多站点中的产品
EN

Stack Overflow用户
提问于 2022-11-05 15:10:42
回答 1查看 11关注 0票数 0

我建立了一个安装了WooCommerce的Wordpress网络。

我在一个WooCommerce多站点中设置了6个子站点。

我有一个小插件,复制所有产品从主网站到所有子网站。因此,所有7个站点(1个主站点和6个子站点)都有完全相同的产品、属性和类别。

每个产品都有7个自定义产品字段(复选框),用于每个子站点的可见性。

我的目标是在每个子站点显示产品之前过滤它们。这样我就可以在不同的子网站上展示不同的产品。

下面的代码(在自定义archive-product.php中)确实通过“自定义产品字段”进行筛选,但是出现了一些问题:

  • ?filter_ urls不过滤产品,但总是显示所有子站点产品

  • 类别页不显示正确的产品,但总是显示所有子站点产品

我有一种感觉,只有在商店的网页,我的过滤器工作。

如何在所有WooCommerce页面上显示整个产品列表(以便每个子站点只处理已过滤的子站点产品列表)?

代码语言:javascript
运行
复制
global $product;

$blog_id = get_current_blog_id();

if ($blog_id == '1') {
    $subsite = '_visibility_3rdmillennium';
} elseif ($blog_id == '2') {
    $subsite = '_visibility_fight2win';
} elseif ($blog_id == '3') {
    $subsite = '_visibility_muaythai';
} elseif ($blog_id == '4') {
    $subsite = '_visibility_taekwondo';
} elseif ($blog_id == '5') {
    $subsite = '_visibility_xprtfightgear';
} elseif ($blog_id == '6') {
    $subsite = '_visibility_hayabusashop';
} elseif ($blog_id == '7') {
    $subsite = '_visibility_kmushop';
}

$paged                  = (get_query_var('paged')) ? absint(get_query_var('paged')) : 1;
$ordering               = WC()->query->get_catalog_ordering_args();
$ordering['orderby']    = array_shift(explode(' ', $ordering['orderby']));
$ordering['orderby']    = stristr($ordering['orderby'], 'price') ? 'meta_value_num' : $ordering['orderby'];
$products_per_page      = apply_filters('loop_shop_per_page', wc_get_default_products_per_row() * wc_get_default_product_rows_per_page());

$filtered_products      = wc_get_products(array(
    'meta_key'  => $subsite,
    'meta_value'    => 'yes',
    'status'        => 'publish',
    'limit'         => $products_per_page,
    'page'          => $paged,
    'paginate'      => true,
    'return'        => 'ids',
    'orderby'       => $ordering['orderby'],
    'order'         => $ordering['order'],
));

wc_set_loop_prop('current_page', $paged);
wc_set_loop_prop('is_paginated', wc_string_to_bool(true));
wc_set_loop_prop('page_template', get_page_template_slug());
wc_set_loop_prop('per_page', $products_per_page);
wc_set_loop_prop('total', $filtered_products->total);
wc_set_loop_prop('total_pages', $filtered_products->max_num_pages);

if ($filtered_products) {
    woocommerce_product_loop_start();
    foreach($filtered_products->products as $filtered_product) {
        $post_object = get_post($filtered_product);
        setup_postdata($GLOBALS['post'] =& $post_object);
        wc_get_template_part('content', 'product');
    }
    wp_reset_postdata();
    woocommerce_product_loop_end();
    do_action('woocommerce_after_shop_loop');

} else {

    do_action('woocommerce_no_products_found');

}
EN

回答 1

Stack Overflow用户

发布于 2022-11-05 20:26:03

我有错误的方法..。我需要修改woocommerce_product_query

代码语言:javascript
运行
复制
function testing_woo_product_query($q) {
    global $product;

    $blog_id = get_current_blog_id();

    if ($blog_id == '1') {
        $subsite = '_visibility_3rdmillennium';
    } elseif ($blog_id == '2') {
        $subsite = '_visibility_fight2win';
    } elseif ($blog_id == '3') {
        $subsite = '_visibility_muaythai';
    } elseif ($blog_id == '4') {
        $subsite = '_visibility_taekwondo';
    } elseif ($blog_id == '5') {
        $subsite = '_visibility_xprtfightgear';
    } elseif ($blog_id == '6') {
        $subsite = '_visibility_hayabusashop';
    } elseif ($blog_id == '7') {
        $subsite = '_visibility_kmushop';
    }

    $args = array(
      array(
        'key'       => $subsite,
        'value'     => 'yes'
      ),
    );

    $q->set( 'meta_query', $args );

}
add_action( 'woocommerce_product_query', 'testing_woo_product_query' );

我现在得到的唯一错误是类别页会产生错误(完全是空白页)。

有什么想法吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74328930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档