WooCommerce 显示缺少属性的产品列表?

问题描述 投票:0回答:2

我搜索了又搜索,但一直无法找到答案,所以提前感谢您的帮助!

我想显示所有未分配特定属性的产品的列表(在管理门户中的产品页面上)(以便我们可以轻松找到需要更新的产品)。

我已经使用此代码的变体设置了相同的功能来显示缺少其他标准(运输类别、重量等)的产品,并且效果很好,但我不确定如何修改它以显示没有其他标准的产品pa_sort-chassis 属性...到目前为止,这就是我所得到的 - 但它不会产生任何结果。

add_action( 'admin_notices', 'products_no_chassisattribute_admin' );
 
function products_no_chassisattribute_admin(){
    global $pagenow, $typenow;
    if ( 'edit.php' === $pagenow && 'product' === $typenow ) {
      echo '<div class="notice notice-warning is-dismissible"><h3>Products with NO Sort By Chassis Attribute</h3><ul>';
      $args = array(
         'status' => 'publish',
         'visibility' => 'visible',
         'limit' => -1
      );
      $products = wc_get_products( $args );
      foreach ( $products as $product ) {
         if ( ! $product = wc_get_products( array( 'pa_sort-chassis' => '' ) )) {
            echo '<li><a href="' . esc_url( get_edit_post_link( $product->get_id() ) ) . '">' . $product->get_name() . '</a></li>';
         }
      }
      echo '</ul></div>';
    }

我修改了我已经使用的代码,但它没有产生任何结果

woocommerce product
2个回答
0
投票

显示未分配

"pa_sort-chassis"
属性的产品!

请尝试此代码,它应该显示在产品页面的管理门户中未分配“pa_sort-chassis”属性的产品。

add_action( 'admin_notices', 'products_no_chassisattribute_admin' );
function products_no_chassisattribute_admin() {
    global $pagenow, $typenow;
    if ( 'edit.php' === $pagenow && 'product' === $typenow ) {
        echo '<div class="notice notice-warning is-dismissible"><h3>Products with NO Sort By Chassis Attribute</h3><ul>';
        $args = array(
            'status'     => 'publish',
            'visibility' => 'visible',
            'limit'      => -1
        );
        $products = wc_get_products( $args );
        foreach ( $products as $product ) {
            $product_attributes = $product->get_attributes();
            if ( ! array_key_exists( 'pa_sort-chassis', $product_attributes ) ) {
                echo '<li><a href="' . esc_url( get_edit_post_link( $product->get_id() ) ) . '">' . $product->get_name() . '</a></li>';
            }
        }
        echo '</ul></div>';
    }
}

使用

get_attributes()
方法检索产品的所有属性。然后,检查键
'pa_sort-chassis'
是否存在于
$product_attributes
数组中。如果不存在,则表示该商品没有分配
"pa_sort-chassis"
属性,会显示在列表中。


0
投票

条件

if (! $product = wc_get_products(array('pa_sort-chassis' => ''))) 

将始终评估为 true,因为您正在为 $product 分配一个值,而不是检查它的存在。

这将导致循环始终执行 if 块内的 echo 语句。

function products_no_chassisattribute_admin() {
    global $pagenow, $typenow;
    if ( 'edit.php' === $pagenow && 'product' === $typenow ) {
        echo '<div class="notice notice-warning is-dismissible"><h3>Products with NO Sort By Chassis Attribute</h3><ul>';
        $args = array(
            'status' => 'publish',
            'visibility' => 'visible',
            'limit' => -1
        );
        $products = wc_get_products( $args );
        foreach ( $products as $product ) {
            $product_attributes = $product->get_attributes();
            if ( empty( $product_attributes['pa_sort-chassis'] ) ) {
                echo '<li><a href="' . esc_url( get_edit_post_link( $product->get_id() ) ) . '">' . $product->get_name() . '</a></li>';
            }
        }
        echo '</ul></div>';
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.