在WordPress数据库的SQL查询中获取WooCommerce产品属性分类

时间:2019-09-02 作者:Ali RJ

我正在尝试检索所有attributes_name WooCommerce表中的值(克拉、颜色、大小等)wp_woocommerce_attribute_taxonomies 在WordPress数据库中。

下面是我的代码,但获取的是属性的名称,而不是该列中的内容:

$sql = "SELECT attribute_name FROM wp_woocommerce_attribute_taxonomies";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo $row[\'attribute_name\'] . "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();
知道如何取回它们里面的东西吗?

2 个回复
最合适的回答,由SO网友:LoicTheAztec 整理而成

使用WordPress进行自定义SQL查询时,应始终使用WPDB 类和相关方法get_results(), 这样做:

global $wpdb;

$results = $wpdb->get_results( "
    SELECT attribute_name
    FROM {$wpdb->prefix}woocommerce_attribute_taxonomies
" );

if ( count($results) > 0) {
    $data = []; // Initializing

    // Loop through results objects
    foreach( $results as $result ) {
        // add each value to an array
        $data[] = $result->attribute_name . "<br>";
    }

    // output data of all rows
    echo implode( "<br>", $data );
} else {
    echo "0 results";
}
Better, 当您查询表的一列时(正如您所做的),您可以使用get_col() 方法如下:

global $wpdb;

$results = $wpdb->get_col( "
    SELECT attribute_name
    FROM {$wpdb->prefix}woocommerce_attribute_taxonomies
" );

if ( count($results) > 0) {
    // output data of all rows
    echo implode( "<br>", $results );
} else {
    echo "0 results";
}
<小时>The best easy way 就是使用WooCommercewc_get_attribute_taxonomies() 专用功能:

$output = \'<ul style="list-style:none;">\';

// Loop through all Woocommerce product attributes
foreach( wc_get_attribute_taxonomies() as $attribute ) {
    $attribute_label = $attribute->attribute_label; // Product attribute name
    $attribute_slug  = $attribute->attribute_name;  // Product attribute slug

    $output .= \'<li class="\'.$attribute_slug.\'">\' . $attribute_label . \'</li>\';
}
// Output
echo $output . \'</ul>\';
相关线程:Get woocommerce product attributes to sidebar

SO网友:ali

非常感谢你的回答。这是一个很好的解决方案,但我仍然没有得到值,只得到属性名称或标题(如表标题)。我需要每个产品的属性行。例如,我在我的仪表板上有属性:克拉、颜色、大小、条件,使用你的代码或我的代码,我只返回caratcolorsizecondition,我希望能够检索如下值

产品1。克拉【0.2】,颜色【l】,尺寸【大】,状态【优良】产品2。克拉【0.90】,颜色【克】,尺寸【小】,状态【好】
产品3。。。。

通过这个sql查询,我更接近于检索所有值:请参见

$sql = "SELECT p.`ID` AS \'Product ID\', p.`post_title` AS \'Product Name\', t.`term_id` AS \'Attribute Value ID\', REPLACE(REPLACE(tt.`taxonomy`, \'pa_\', \'\'), \'-\', \' \') AS \'Attribute Name\', t.`name` AS \'Attribute Value\' FROM `wp_posts` AS p INNER JOIN `wp_term_relationships` AS tr ON p.`ID` = tr.`object_id` INNER JOIN `wp_term_taxonomy` AS tt ON tr.`term_taxonomy_id` = tt.`term_id` AND tt.`taxonomy` LIKE \'pa_%\' INNER JOIN `wp_terms` AS t ON tr.`term_taxonomy_id` = t.`term_id` WHERE p.`post_type` = \'product\' AND p.`post_status` = \'publish\' ";

$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
         echo $row[\'Attribute Value\'] . "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();

相关推荐

$wpdb insert is not work

我尝试了在自定义表中插入数据的不同方法,但不起作用,也没有错误。有时是节省,但大多数时间不是。我在网上查了一下,但没有一个解决方案适合我。我的最后一种方法是:$sql = $wpdb->prepare(\"INSERT INTO `$table_name` (`name`, `email`, `phone`, `address`, `message`, `rq`, `url`) values (%s, %s, %s, %s, %s, %d, %s)\", $na