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

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

雷晋
2023-03-14

如何从插件为WooCommerce创建属性?我只发现:

wp_set_object_terms( $object_id, $terms, $taxonomy, $append);

从这个问题

但这种方法需要某些产品的id。我需要生成一些未附加到任何产品的属性。

共有2个答案

益何平
2023-03-14

吴宇森商业3(2018)

要从标签名称创建新的产品属性,请使用以下函数:

function create_product_attribute( $label_name ){
    global $wpdb;

    $slug = sanitize_title( $label_name );

    if ( strlen( $slug ) >= 28 ) {
        return new WP_Error( 'invalid_product_attribute_slug_too_long', sprintf( __( 'Name "%s" is too long (28 characters max). Shorten it, please.', 'woocommerce' ), $slug ), array( 'status' => 400 ) );
    } elseif ( wc_check_if_attribute_name_is_reserved( $slug ) ) {
        return new WP_Error( 'invalid_product_attribute_slug_reserved_name', sprintf( __( 'Name "%s" is not allowed because it is a reserved term. Change it, please.', 'woocommerce' ), $slug ), array( 'status' => 400 ) );
    } elseif ( taxonomy_exists( wc_attribute_taxonomy_name( $label_name ) ) ) {
        return new WP_Error( 'invalid_product_attribute_slug_already_exists', sprintf( __( 'Name "%s" is already in use. Change it, please.', 'woocommerce' ), $label_name ), array( 'status' => 400 ) );
    }

    $data = array(
        'attribute_label'   => $label_name,
        'attribute_name'    => $slug,
        'attribute_type'    => 'select',
        'attribute_orderby' => 'menu_order',
        'attribute_public'  => 0, // Enable archives ==> true (or 1)
    );

    $results = $wpdb->insert( "{$wpdb->prefix}woocommerce_attribute_taxonomies", $data );

    if ( is_wp_error( $results ) ) {
        return new WP_Error( 'cannot_create_attribute', $results->get_error_message(), array( 'status' => 400 ) );
    }

    $id = $wpdb->insert_id;

    do_action('woocommerce_attribute_added', $id, $data);

    wp_schedule_single_event( time(), 'woocommerce_flush_rewrite_rules' );

    delete_transient('wc_attribute_taxonomies');
}

代码function.php活动子主题(或活动主题)的文件中。测试和工作。

基于:

  • 产品属性wc\u创建属性()功能代码(Woocommerce 3.2)
  • 在Woocommerce中以编程方式创建一个可变产品和两个新属性

相关:使用Woocommerce 3中的CRUD方法以编程方式创建产品

郜昊苍
2023-03-14

要创建术语,可以使用wp_insert_term()

像这样:

wp_insert_term( 'red', 'pa_colors' );

其中colors是属性的名称。属性的分类名称始终以pa\uu开头。

编辑属性仅仅是自定义分类法。或者可以说它们是由用户在后端手动创建的动态分类法。尽管如此,自定义分类规则仍然适用。

您可以在这里看到源代码,它循环遍历属性并在每个属性上运行register\u taxonomy()。因此,要创建一个新属性(请记住它只是一个分类法),您需要运行register\u taxonomy()并简单地将pa\u前置到分类法名称的开头。

从core中模仿分类法参数的一些值会为“颜色”属性得到类似的东西。

/**
 * Register a taxonomy.
 */
function so_29549525_register_attribute() {

    $permalinks = get_option( 'woocommerce_permalinks' );

    $taxonomy_data = array(
                        'hierarchical'          => true,
                        'update_count_callback' => '_update_post_term_count',
                        'labels'                => array(
                                'name'              => __( 'My Colors', 'your-textdomain' ),
                                'singular_name'     => __( 'Color', 'your-textdomain' ),
                                'search_items'      => __( 'Search colors', 'your-textdomain' ),
                                'all_items'         => __( 'All colors', 'your-textdomain' ),
                                'parent_item'       => __( 'Parent color', 'your-textdomain' ),
                                'parent_item_colon' => __( 'Parent color:', 'your-textdomain' ),
                                'edit_item'         => __( 'Edit color', 'your-textdomain' ),
                                'update_item'       => __( 'Update color', 'your-textdomain' ),
                                'add_new_item'      => __( 'Add new color', 'your-textdomain' ),
                                'new_item_name'     => __( 'New color', 'your-textdomain' )
                            ),
                        'show_ui'           => false,
                        'query_var'         => true,
                        'rewrite'           => array(
                            'slug'         => empty( $permalinks['attribute_base'] ) ? '' : trailingslashit( $permalinks['attribute_base'] ) . sanitize_title( 'colors' ),
                            'with_front'   => false,
                            'hierarchical' => true
                        ),
                        'sort'              => false,
                        'public'            => true,
                        'show_in_nav_menus' => false,
                        'capabilities'      => array(
                            'manage_terms' => 'manage_product_terms',
                            'edit_terms'   => 'edit_product_terms',
                            'delete_terms' => 'delete_product_terms',
                            'assign_terms' => 'assign_product_terms',
                        )
                    );

  register_taxonomy( 'pa_my_color', array('product'), $taxonomy_data );

}
add_action( 'woocommerce_after_register_taxonomy', 'so_29549525_register_attribute' );

更新2020-11-18

属性分类法存储在{$wpdb-

我测试属性是否存在的条件逻辑不是最好的,我建议在插件的更新例程中使用某种版本选项。但作为使用wc\u create\u taxonomy()的一个示例,应该插入一个名为“我的颜色”的属性。

/**
 * Register an attribute taxonomy.
 */
function so_29549525_create_attribute_taxonomies() {

    $attributes = wc_get_attribute_taxonomies();

    $slugs = wp_list_pluck( $attributes, 'attribute_name' );

    if ( ! in_array( 'my_color', $slugs ) ) {

        $args = array(
            'slug'    => 'my_color',
            'name'   => __( 'My Color', 'your-textdomain' ),
            'type'    => 'select',
            'orderby' => 'menu_order',
            'has_archives'  => false,
        );

        $result = wc_create_attribute( $args );

    }
}
add_action( 'admin_init', 'so_29549525_create_attribute_taxonomies' );

 类似资料:
  • 问题内容: 我想以编程方式创建具有两个新的Variant属性的变量产品(“父”产品)-所有这些都来自WordPress插件(因此,无需向API发送HTTP请求)。 这两个变量属性也应该动态创建。 如何才能做到这一点 ? (使用WooCommerce版本3) 更新:我已经在此上编写了更多行代码,并使用wooCommerce对象尝试了许多解决方案,并使用WordPress数据库在数据库中添加了有关术语

  • 我在WooCommerce版本3+中创建了一个可变产品(父“产品”)。从一个WordPress插件中,我想以编程方式创建具有新属性值的产品变体(儿童“产品)。 变体属性已在WooCommerce中设置。 因此,每次创建一个变体时,都应以编程方式创建新属性的值,并在父变量product中设置新属性的值。 如何才能做到这一点呢?有可能吗? 更新:我已经为此编写了更多的代码行,并且尝试了许多方法来解决它

  • 我想以编程方式创建一个带有两个新变量属性的变量产品(“父”产品)——所有这些都来自WordPress插件(因此没有对API的HTTP请求)。 这两个变量属性也应该动态创建。 这怎么能做到呢? (适用于WooCommerce第3版) 更新:我已经写了更多我希望的代码,并尝试了很多方法来解决它,使用wooCommerce对象,并使用WordPress数据库对象在数据库中添加了关于术语、termmeta

  • 每次根据其他几个字段的内容保存产品时,我都希望更新产品在我的商店中的属性。 然而,我正在努力让我的属性正确出现。 最初,我试图使用以下功能根据这个问题的公认答案更新产品: 这将添加到了分类法的可用术语列表中,但在我检查产品属性时,它们不可见。 接下来,我尝试了上述问题中第二个答案的变体: 这也无法更新产品的属性。 在这一点上,我不知道下一步该尝试什么。使用操作似乎是有效的,因为这个术语确实被添加到

  • 在WooCommerce中,我试图找到一种类似于方法或的方法,例如,设置产品类型,如简单或变化。 实际上,我使用的是对象如下: 如果用户选中“简单产品”或“可变产品”,我如何设置产品类型? 任何帮助都很感激。

  • 我正在使用在woocommerce中以编程方式添加产品。除了产品属性外,其他所有功能都正常工作。除非我从管理员处单击“更新”,否则产品页面视图中不会显示产品属性。 我正在添加成吨的产品,所以有没有办法在产品页面的下拉列表中显示变化。 这是我的代码,它工作正常,所有内容都放在正确的字段中,如果不单击“更新”,它就不会在产品页面上显示选项。