【问题标题】:Display each woocommerce variations stock quantity in wp-admin column在 wp-admin 列中显示每个 woocommerce 变化的库存数量
【发布时间】:2019-06-03 13:59:08
【问题描述】:

我所有的 woocommerce 产品都是可变产品。他们每个人都有相同的变化“男性”和“女性”。

我正在尝试在 wp-admin 的产品概览中为每个产品添加一列,同时显示该变体的库存数量。

我已经包含以下代码,它显示“男性”和“女性”的总和。有没有办法只查询其中一个?

function add_qty_admin( $column ) {
    if (!isset($columns['total_qty']))
    $columns['total_qty'] = "Totaal in voorraad";
    return $columns;
}
add_filter( 'manage_posts_columns', 'add_qty_admin' );

function admin_post_data_row($column_name, $post_id)
{
global $wpdb;
switch($column_name)
{
    case 'total_qty':
        $query = "SELECT sum(meta_value)
                  FROM $wpdb->posts AS p, $wpdb->postmeta AS s
                  WHERE p.post_parent = %d
                  AND p.post_type = 'product_variation'
                  AND p.post_status = 'publish'
                  AND p.id = s.post_id
                  AND s.meta_key = '_stock'";

        $product_qty = $wpdb->get_var($wpdb->prepare($query,$post_id));
        if ($product_qty) echo $product_qty;
        break;

    default:
        break;
}
}
add_action( 'manage_posts_custom_column', 'admin_post_data_row', 10, 2);

【问题讨论】:

  • 您的问题不清楚,因为“男性”和“女性”不能是变体,而是产品属性(或产品属性的术语)。所以 2 种可能的情况:Case 1) 每一个都是变体的产品属性... Case 2) 或者两者都是变体的一个产品属性的术语(在这种情况下哪一个?您需要提供“男性”和“女性”所涉及的产品属性分类)...所以请澄清您的问题,因为实际上没有人可以提供帮助。

标签: php wordpress woocommerce stock wp-admin


【解决方案1】:

假设您的产品属性是“性别”(所以分类是“pa_gender”)并且有 2 个术语“男性”和“女性”,以下代码将在 admin 中添加一个自定义列带有“男性”一词的变体总数量和“女性”变量的总数量的产品列表。

// Add a custom column to admin product list
add_filter( 'manage_edit-product_columns', 'product_variations_total_quantity_column', 10, 1 );
function product_variations_total_quantity_column( $columns ) {
    $columns['gender_qty'] = __("Stock totals", "woocommerce");

    return $columns;
}

// Display the data for this cutom column on admin product list
add_action( 'manage_product_posts_custom_column', 'product_variations_total_quantity_values', 10, 2 );
function product_variations_total_quantity_values( $column, $post_id ) {
    if( $column === 'gender_qty' ) {
        // Define the product attribute taxonomy (always start with "pa_")
        $taxonomy = 'pa_gender';

        echo '<table><tr>
            <td>M: '   . get_gender_qty( $post_id, 'male', $taxonomy )   . '</td>
            <td>F: ' . get_gender_qty( $post_id, 'female', $taxonomy ) . '</td>
        </tr></table>';
    }
}

// Get the total quantity of variations with a specific product attribute term slug
function get_gender_qty( $post_id, $term_slug, $taxonomy ) {
    global $wpdb;

    return (int) $wpdb->get_var($wpdb->prepare("
        SELECT sum(pm.meta_value)
        FROM {$wpdb->prefix}posts p
        INNER JOIN {$wpdb->prefix}postmeta pm ON p.id = pm.post_id
        INNER JOIN {$wpdb->prefix}postmeta pm2 ON p.id = pm2.post_id
        WHERE p.post_type = 'product_variation'
        AND p.post_status = 'publish'
        AND p.post_parent = %d
        AND pm.meta_key = '_stock'
        AND pm2.meta_key = '%s'
        AND pm2.meta_value = '%s'
    ", $post_id, 'attribute_'.$taxonomy, $term_slug ) );
}

代码在您的活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。

【讨论】:

  • 我一直在寻找这样的东西,这很好用,谢谢!我想知道,当属性很多时,有没有办法隐藏那些显示“0”的?有时有些产品甚至没有使用属性,所以这对于没有用零填充的行非常有用。
猜你喜欢
  • 2018-05-25
  • 1970-01-01
  • 2021-02-24
  • 2017-12-15
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多