当前位置: 首页 > 知识库问答 >
问题:

使用PHP向WooCommerce产品添加属性

龙凯
2023-03-14

我正在尝试向现有的WooCommerce产品添加一个具有多个值的新属性。

这是我正在使用的代码。我把它简化了一点,使它更清楚。

$productId = 87356;

$attr = get_post_meta( $productId, '_product_attributes', true );

$gears = [ '3', '7' ];

$attr['pa_aantal-versnellingen'] = [
    'name' => 'pa_aantal-versnellingen',
    'value' => implode(' | ', $gears),
    'is_visible' => '1',
    'is_variation' => '1',
    'is_taxonomy' => '1'
];

update_post_meta( $productId, '_product_attributes', $attr );

foreach ( $gears as $gear ) {
    wp_set_object_terms( $productId, $gear, 'pa_aantal-versnellingen', true );
}

该属性显示在产品的属性列表中。然而,条款没有添加。

数据库中也有这些术语:

我做错了什么?我做了很多研究,读了一些其他的问题,但它们对我没有帮助。

在WooCommerce中以编程方式创建新产品属性

共有1个答案

锺离逸春
2023-03-14

在研究了WordPress ERD之后,我想出了一个解决办法

而不是wp\u set\u object\u terms() 我使用普通的MySQL查询。

>

  • wp_term_taxonomy表中获取term_taxonomy_id

    $placeholders = array_fill( 0, count( $gears ), '%s' );
    $format = implode( ', ', $placeholders );
    
    $sql = 
        "SELECT tt.term_taxonomy_id" .
        "FROM {$wpdb->prefix}term_taxonomy tt" .
        "JOIN {$wpdb->prefix}terms t ON tt.term_id = t.term_id" . 
        "WHERE tt.taxonomy = 'pa_aantal-versnellingen' AND t.name IN($format)"
    ;
    
    $termTaxIds = $wpdb->get_results( $wpdb->prepare( $sql, $gears ), ARRAY_N );
    

    对于每个term\u分类法\u id值,在wp\u term\u关系表中插入一个新条目

    foreach ( $termTaxIds as $termTaxId ) {
        $insertSql = 
            "INSERT INTO {$wpdb->prefix}term_relationships" .
            "(object_id, term_taxonomy_id, term_order)" .
            "VALUES (%d, %d, 0)"
        ;
    
        $wpdb->query( $wpdb->prepare( $$insertSql, $productId, $termTaxId[0] ) );
    }
    

  •  类似资料:
    • 第一件事:这是我在stackoverflow上发布的第一个问题。换句话说,这是我在你们的帮助下无法独自解决的第一个问题(非常感谢你们,你们让世界运转起来!)。 我的问题与@LoictheAztec对另一个问题的回答有关(我原本计划在那篇文章的评论中发布我的问题,但由于我是/曾经是潜伏者,我缺乏这样做的声誉):https://stackoverflow.com/a/47766413/13263330

    • 我正在使用此代码添加自定义属性 这个代码的结果我得到了添加只是产品属性名称没有术语值... 我找了很多,但没有得到任何答案。

    • 我在我的Wordpress网站上使用WooCommerce作为目录(即禁用购物车),我想根据产品是否具有特定标签将小部件添加到单个产品页面侧边栏。我尝试使用“小部件逻辑”插件和条件标签,但即使我禁用了所有其他插件,我也无法让它在网站的任何地方工作(即包括带标签的帖子和主侧边栏-所以不仅仅是带标签的产品WooCommerce)。 然后我添加了“PHP代码小部件”,并在其中添加了以下代码: 我已经用标

    • 我正在查询如下所示的帖子: 这将返回product类型的所有post。但我在wooCommerce中创建的产品上有自定义属性,但我似乎在任何地方都找不到这些信息。 我尝试使用: 我还尝试: 当我print_r这些我得到了很多信息但我不能看到的产品属性从WooCommerce任何地方 下图显示了如何在产品上设置此信息。 查询帖子后如何访问此信息?特别是我需要提取的颜色和大小。

    • 目标:在一个按钮点击中添加多个可变产品到购物车。 我试着将这段代码放入循环中,但它不起作用。 但是这种方法不能解决问题,因为我需要在一个按钮点击中添加几个产品变体。 所有的建议都将不胜感激。多谢了。

    • 如何通过代码为woocommerce属性添加值?我已经创建了一个名为“Dispatch time”(分类法:pa_Dispatch)的属性,现在我想为特定产品的Dispatch属性添加值。 如何通过编程实现这一点?