天道酬勤,学无止境

如何将类别设置为产品woocommerce(How to set category to product woocommerce)

问题

是否可以向 woocommerce 帖子添加类别?

我正在创建我的产品如下:

// creates woocommerce product 
$product = array(
    'post_title'    => $name,
    'post_content'  => '',
    'post_status'   => 'publish',
    'post_author'   => $current_user->ID,
    'post_type'     =>'product'
);

// Insert the post into the database
$product_ID = wp_insert_post($product);

我有一个名为“树”的类别,我必须将上述产品添加到其中。 我尝试了以下但没有成功。 是否有一些特殊的方法来添加类别?

wp_set_object_terms($productID, array('Tree'), 'product_cat');
回答1

经过一些试验和错误,我通过以下方式解决了它:

// Creates woocommerce product 
$product = array(
    'post_title'    => $name,
    'post_content'  => '',
    'post_status'   => 'publish',
    'post_author'   => $current_user->ID,
    'post_type'     =>'product'
);

// Insert the post into the database
$product_ID = wp_insert_post($product);

// Gets term object from Tree in the database. 
$term = get_term_by('name', 'Tree', 'product_cat');

wp_set_object_terms($product_ID, $term->term_id, 'product_cat');

更多信息参考:

  • 如何以编程方式为新的 Woocommerce 产品创建设置类别?
  • http://codex.wordpress.org/Function_Reference/get_term_by
  • https://wordpress.stackexchange.com/questions/16394/how-to-get-a-taxonomy-term-name-by-the-slug
回答2

如果您需要多个类别,只需传递一个数组:

$categories = [ 'Some Category', 'Some other Category' ];

// Overwrite any existing term
wp_set_object_terms( $product_id, $categories, 'product_cat' );


// Or, set last argument to true to append to existing terms
wp_set_object_terms( $product_id, $categories, 'product_cat', true );

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 删除 Woocommerce 中特定产品类别的添加购物车按钮(Remove add cart button in Woocommerce for a specific product category)
    问题 我有一个问题,如何从类别产品中删除购物车。 如果我将它应用于特定的 id 或一般所有,它就可以正常工作,但我无法为一个类别执行此操作。 下面是我对它所做的代码。 此外,我正在努力将这种相同的模式应用于“相关文章”部分,因此将不胜感激。 谢谢你。 //function for deleting .... function remove_product_description_add_cart_button(){ global $product; //Remove Add to Cart button from product description of product with id 1234 if ($product->id == 188){ remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 ); } add_action('wp','remove_product_description_add_cart_button'); } 回答1 2020 年 11 月更新 要使其适用于产品类别,您可以通过以下方式使用 WordPress 条件函数 has_term(): add_action('woocommerce_single
  • 如何以编程方式为新的Woocommerce产品创建设置类别?(How to programatically set the category for a new Woocommerce Product Creation?)
    问题 这里介绍的解决方案使我可以轻松地为wordpress帖子创建“类别”: //Check if category already exists $cat_ID = get_cat_ID( $category ); //If it doesn't exist create new category if($cat_ID == 0) { $cat_name = array('cat_name' => $category); wp_insert_category($cat_name); } //Get ID of category again incase a new one has been created $new_cat_ID = get_cat_ID($category); // Create post object $new_post = array( 'post_title' => $headline, 'post_content' => $body, 'post_excerpt' => $excerpt, 'post_date' => $date, 'post_date_gmt' => $date, 'post_status' => 'publish', 'post_author' => 1, 'post_category' => array($new_cat_ID)
  • 如何使用 WooCommerce 更改每行的产品类别数(How to change the number of product categories per row using WooCommerce)
    问题 我正在使用 Woocommerce 设置在初始商店页面上显示类别缩略图,然后在其中显示产品及其缩略图。 我想让初始类别页面每行显示 3 个缩略图,产品页面每行显示 5 个类别。 要每行显示 5 个产品,我使用过: add_filter('loop_shop_columns', 'loop_columns'); if (!function_exists('loop_columns')) { function loop_columns() { return 5; } } 这会更改类别页面和商店页面上每行的缩略图。 有谁知道如何将类别页面更改为每行 3 个缩略图并在商店页面上维护每行 5 个产品? 回答1 使用 WooCommerce 条件标签将帮助您实现这一目标。 我已经更改了您的代码: add_filter('loop_shop_columns', 'loop_columns'); if (!function_exists('loop_columns')) { function loop_columns() { if ( is_product_category() ) { return 3; } else { // for other archive pages and shop page return 5; } } } 此代码位于活动子主题或主题的 function.php
  • WooCommerce-如何从网址中删除产品和产品类别?(WooCommerce- How to remove product & product-category from urls?)
    问题 我在 WordPress 上使用 WooCommerce,它将产品和产品类别添加到 URL。 http://dev.unwaveringmedia.com/8dim/product-category/all-party-supplies/ http://dev.unwaveringmedia.com/8dim/product/14-snowman-serving-tray/ 我需要从 URL 中删除“产品”和“产品类别”。 有没有办法修改永久链接并删除它们? 回答1 SEO 和 UX 拥有产品类别库的良好做法。 产品类别库有助于区分产品和帖子。 我通常将产品类别基础更改为“我们的产品”或“产品”。 为此,请转到设置-> 永久链接-> 输入所需的产品类别库。 回答2 WooCommerce 文档中有对此的官方答案。 一个片段: 不幸的是,由于 WordPress 解析其 URL 的方式,这是不可能的。 它使用 URL 的“产品类别”(或与此相关的任何其他文本)基础来检测它是否是指向产品类别的 URL。 有一些后续解释,据称有一些插件可以实现,尽管不推荐。 您也可以“破解”核心代码,只需更改它们用于该永久链接结构的字符串——或者这可能是其他地方提到的设置的目的?
  • 在 Woocommerce 中隐藏“缺货”产品(Hide 'out of stock' products in Woocommerce)
    问题 在“产品”和“库存”下,我检查了以下设置:“隐藏目录中的缺货商品” 现在所有售罄的产品都隐藏在存档/类别视图中。 到现在为止还挺好。 问题是隐藏的(缺货)产品是按每页计算的。 因此,如果第一页上有 3 种产品售罄,则仅显示有库存的产品 (6)。 这些“隐藏”的产品似乎也仍然可以搜索,并且可以通过不同的小部件看到。 任何想法如何解决这一问题? 我的意思是真正隐藏缺货的产品。 还是我需要手动删除它们? 回答1 您可以尝试将其添加到主题的 functions.php 文件中: add_action( 'pre_get_posts', 'custom_pre_get_posts_query' ); function custom_pre_get_posts_query( $q ) { if ( ! $q->is_main_query() ) return; if ( ! $q->is_post_type_archive() ) return; if ( ! is_admin() ) { $q->set( 'meta_query', array(array( 'key' => '_stock_status', 'value' => 'outofstock', 'compare' => 'NOT IN' ))); } remove_action( 'pre_get_posts',
  • 显示woocommerce中当前产品的最深子类别(Display deepest child category for current product in woocommerce)
    问题 这似乎很容易做到,但我一直做不到,也找不到关于它的任何帖子。 我可以显示与产品关联的所有类别,也可以显示顶层类别,但是您如何仅显示产品的最低/最深类别? Cat-A [x] Cat-B [x] Cat-C [x] Cat-D [ ] Cat-E [ ] Cat-F [ ] Cat-G [ ] Cat-H [ ] 如果此示例是产品的血统,那么我要打印的只是“ Cat-C”。 但是我不想像其他解决方案一样手动设置类别级别,而是希望它始终打印最低的子级,无论是存档页面上的产品还是单个产品页面。 关于如何/应该如何做的任何想法? 回答1 尝试类似的东西: // get all product cats for the current post $categories = get_the_terms( get_the_ID(), 'product_cat' ); // wrapper to hide any errors from top level categories or products without category if ( $categories && ! is_wp_error( $category ) ) : // loop through each cat foreach($categories as $category) : // get the
  • 向 Woocommerce 中销售的产品添加“销售”产品类别(Adding “Sale” product category to products that are on sale in Woocommerce)
    问题 作为 WooCommerce 网站的一部分,我想要一个列出销售项目的销售页面(带有分页和过滤功能)。 我认为最好的方法是将“销售”类别自动添加到作为销售一部分的任何帖子中(因为类别页面允许自动过滤和分页。 到目前为止,我有这段代码可以在您保存产品时以编程方式将销售类别添加到产品中: function update_test( $product) { wp_set_object_terms($product, 'sale', 'product_cat', true ); } add_action( 'save_post', 'update_test', 1, 2);` 但是,我只希望在产品打折时发生这种情况(即设置了销售价格),以便保存未打折的帖子不会添加销售类别。 我尝试了几种不同的方法,但都没有运气。 我试过这个,但没有用: function update_test( $product ) { if($product->is_on_sale()){ wp_set_object_terms($product, 'sale', 'product_cat', true ); } } add_action( 'save_post', 'update_test', 1, 2);` 但这只是让我的网站在保存时冻结。 有任何想法吗? 安迪 回答1 更新 2 (2018 年 10 月)
  • WooCommerce-如何基于类别创建多个单一产品模板?(WooCommerce - How to create multiple single product template based on category?)
    问题 您好,我是woocommerce的新手,我的商店有使用相同单一产品模板的四类产品。 我要添加第五类产品,其产品页面布局与已使用的页面布局有很大不同。 这是文件结构- 主题/ woocommerce /单个产品/ 主题/ woocommerce /单产品模拟/ 主题/ woocommerce /单产品模拟/title.php 主题/woocommerce/content-single-product-mock.php 主题/woocommerce/single-product.php 我创建了一个名为content-single-product-mock.php的文件。 在single-product.php中,使用以下代码 <?php if (has_term( 'mock', 'product_cat' )) { woocommerce_get_template_part( 'content', 'single-product-mock' ); } else{ wc_get_template_part( 'content', 'single-product' ); } ?> 对于类别模拟,它重定向到content-single-product-mock.php,但它使用单一产品文件夹中的模板文件。 如何更改content-single-product-mock
  • 根据类别,为每种产品向WooCommerce添加费用(Add a fee to WooCommerce per product, based on category)
    问题 我已经尝试了一段时间以使其正常工作,但是我没有找到能完全满足我们需求的解决方案,而且我离PHP专家还很远,所以我有点迷失了方向。 我们使用WooCommerce和WooTickets。 目标是仅对“门票”类别(ID:34)中的产品增加5%的“服务费”费用。 我们发现了此代码截取器,该代码截取器根据产品类别添加了固定费用: // Add Service Fee to Category function woo_add_cart_fee() { $category_ID = '23'; global $woocommerce; foreach ($woocommerce->cart->cart_contents as $key => $values ) { // Get the terms, i.e. category list using the ID of the product $terms = get_the_terms( $values['product_id'], 'product_cat' ); // Because a product can have multiple categories, we need to iterate through the list of the products category for a match foreach (
  • woocommerce-如何获得当前产品类别中最顶级的类别(woocommerce - How do I get the most top level category of the current product category)
    问题 我有一个Woocommerce产品,我需要在该页面上显示分配给该产品的类别中最顶层的类别 - Main Product Category -- Sub Product Category --- Category Assigned to product 我需要获取“主要产品类别”的ID或名称,以便可以在单个产品类别中显示它。 我已经尝试过执行以下操作: global $post; $terms = get_the_terms( $post->ID, 'product_cat' ); foreach ($terms as $term) { $product_cat_id = $term->term_id; $thetop_parent = woocommerce_get_term_top_most_parent( $product_cat_id , 'product_cat' ); echo $thetop_parent; } 但是它根本没有用,并且它在woocomerce_get_term之后阻止了页面的加载。 感谢您对此的任何帮助。 回答1 也许这: $cat = get_the_terms( $product->ID, 'product_cat' ); foreach ($cat as $categoria) { if($categoria->parent == 0){
  • 从WordPress获取WooCommerce产品类别(Get WooCommerce product categories from WordPress)
    问题 我正在尝试通过WordPress主题中的函数从WooCommerce获取产品类别 function get_me_list_of($atts, $content = null) { $args = array( 'post_type' => 'product', 'posts_per_page' => 10, 'product_cat' => $atts[0]); $loop = new WP_Query( $args ); echo '<h1 class="upp">Style '.$atts[0].'</h1>'; echo "<ul class='mylisting'>"; while ( $loop->have_posts() ) : $loop->the_post(); global $product; echo '<li><a href="'.get_permalink().'">'.get_the_post_thumbnail($loop->post->ID, 'thumbnail').'</a></li>'; echo '<li><a href="'.get_permalink().'">'.$loop->post->post_title.'</a></li>'; echo '<li><a href="">'.get_categories().'</a><
  • Woocommerce获得下一个/上一个产品相同类别(Woocommerce get next / previous product SAME category)
    问题 我读过这篇文章:Woocommerce获得下一个/上一个产品 并尝试了这个: <?php previous_post_link('%link', 'Previous in category', TRUE); ?> 他们中的任何一个在woocommerce产品类别下工作,有什么主意吗? 提前致谢! 回答1 <?php previous_post_link_product('%link', '« Anterior: %title', true); ?> <?php next_post_link_product('%link', 'Siguiente: %title »', true); ?> 在您的文件yourtheme / functions.php中添加这些功能 function next_post_link_product($format='%link »', $link='%title', $in_same_cat = false, $excluded_categories = '') { adjacent_post_link_product($format, $link, $in_same_cat, $excluded_categories, false); } function previous_post_link_product($format='« %link'
  • 限制购物车项目来自 WooCommerce 中的同一产品类别(Restricting cart items to be from the same product category in WooCommerce)
    问题 当购物车中添加了具有特殊产品类别“cat_x”的项目并显示一些不同的自定义通知时,我正在使用下面的代码从购物车中删除其他 WooCommerce 产品类别项目。 代码来自这个线程并且运行良好: add_action( 'woocommerce_check_cart_items', 'checking_cart_items' ); function checking_cart_items() { $special = false; $catx = 'cat_x'; $number_of_items = sizeof( WC()->cart->get_cart() ); if ( $number_of_items > 0 ) { // Loop through all cart products foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) { $item = $values['data']; $item_id = $item->id; // detecting if 'cat_x' item is in cart if ( has_term( $catx, 'product_cat', $item_id ) ) { if (!$special) $special = true; } } // Re
  • Woocommerce获得产品(Woocommerce get products)
    问题 我使用以下代码从我的WordPress网站中获取了WooCommerce产品类别的列表: <?php $taxonomy = 'product_cat'; $orderby = 'name'; $show_count = 0; // 1 for yes, 0 for no $pad_counts = 0; // 1 for yes, 0 for no $hierarchical = 0; // 1 for yes, 0 for no $title = ''; $empty = 0; $args = array( 'taxonomy' => $taxonomy, 'orderby' => $orderby, 'show_count' => $show_count, 'pad_counts' => $pad_counts, 'hierarchical' => $hierarchical, 'title_li' => $title, 'hide_empty' => $empty ); ?> <?php $all_categories = get_categories( $args ); //print_r($all_categories); foreach ($all_categories as $cat) { //print_r($cat); if($cat->category
  • WP_Query仅属于多个类别的Woocommerce产品tax_query(WP_Query Woocommerce products that belong in distinct multiple categories only tax_query)
    问题 我正在将WP_Query用于Woocommerce产品,以尝试查询特定类别的产品。 这是对我有用的语法- $args = array( 'posts_per_page' => -1, 'product_cat' => 'category-slug-here', 'post_type' => 'product', 'orderby' => 'title', ); $the_query = new WP_Query( $args ); // The Loop while ( $the_query->have_posts() ) { $the_query->the_post(); echo '' . get_the_title() . '<br /><br />'; } wp_reset_postdata(); 这将返回的数据,但我想传递一个ID,而不是一个类别蛞蝓,进行筛选,我想找到仅存多个类别的产品。 参数product_cat不是WP_Query (至少可以找到),因此我假设这是Woocommerce的自定义内容。 通过他们的文档,我找不到任何可以按类别ID进行过滤的内容,也无法使用AND条件进行过滤。 使用cat , tax_query数组和category__and并没有产生任何结果。 本质上,我想查询类别ID 102和115中都存在的所有产品。如果我必须使用
  • WooCommerce:在数据库中查找产品(WooCommerce: Finding the products in database)
    问题 我正在使用WooCommerce创建一个网站,我想根据用户在我的主页上的搜索表单中输入的邮政编码将可用产品限制为用户使用。 为了实现这一点,我必须在phpMyAdmin中指定数据库中每个产品的条件,但是我似乎找不到它。 有人知道phpmyAdmin中产品和/或类别的woocommerce数据库在哪里吗? 先感谢您。 回答1 更新2020 产品主要位于下表中: 带有post_type wp_posts表,例如product (或product_variation ), wp_postmeta表,其中post_id作为关系索引(产品ID)。 wp_wc_product_meta_lookup表,其中product_id作为关系索引(职位ID)| 允许快速查询特定产品数据(自WooCommerce 3.7起) wp_wc_order_product_lookup表,其中product_id为关系索引(职位ID)| 允许快速查询以检索订单上的产品(自WooCommerce 3.7起) 产品类型,类别,子类别,标签,属性和所有其他自定义分类法位于下表中: wp_terms wp_termmeta wp_term_taxonomy wp_term_relationships列object_id作为关系索引(产品ID) wp_woocommerce_termmeta wp
  • 获取 woocommerce 子类别产品(Get woocommerce subcategory products)
    问题 我正在尝试让带有产品的 woocommerce 子类别显示在主要类别下。 <ul class="wsubcategs"> <?php $wsubargs = array( 'hierarchical' => 1, 'show_option_none' => '', 'hide_empty' => 0, 'parent' => $category->term_id, 'taxonomy' => 'product_cat' ); $wsubcats = get_categories($wsubargs); foreach ($wsubcats as $wsc): ?> <li><a href="<?php echo get_term_link( $wsc->slug, $wsc->taxonomy );?>"><?php echo $wsc->name;?></a> </li> <?php endforeach; ?> </ul> 到目前为止,这已经让我在正确的主要类别下获得了相应的子类别,但在它们下没有显示任何产品。 任何意见,将不胜感激。 哦。 回答1 在 Wordpress 中有很多方法可以做到这一点。 您可以使用 WP_Query 对象进行自定义查询以获取该类别中的所有产品,这将是最灵活的选项,但还有一种更简单的方法。 Woocommerce
  • Woocommerce-防止将两个不同类别的商品添加到购物车(Woocommerce - Prevent Adding items from two different categories to cart)
    问题 我想防止用户立即将不同类别的产品添加到购物车中。 假设用户导航到其他类别并尝试将产品添加到购物车,他们将首先清除购物车。 请任何人知道我将如何处理这个问题? 我是这样的新手。 谢谢 回答1 我已经解决了这个问题。 我的文章在这里。 它与您的要求略有不同,因为当他们尝试添加第二个类别时,他们没有清除购物车,而是将原始商品保留在购物车中并显示警告。 对于后代: <?php // Enforce single parent category items in cart at a time based on first item in cart function get_product_top_level_category ( $product_id ) { $product_terms = get_the_terms ( $product_id, 'product_cat' ); $product_category_term = $product_terms[0]; $product_category_parent = $product_terms[0]->parent; while ( $product_category_parent != 0 ) { $product_category_term = get_term($product_category_parent,
  • WooCommerce - 将产品类别添加到订单明细表(WooCommerce - Adding product category to order-details table)
    问题 这就是我正在尝试做的事情以及在哪里。 在订单的结账流程中,在插件 WooCommerce 中; 结帐过程完成后,您将被带到一个页面。 它显示订单详细信息的概览。 用于输出此页面的模板文件是 order-details.php。 这是我想补充的 我想像这样显示产品的产品类别: 这是我尝试添加的代码区域,即订单详细信息表的第一部分。 <tbody> <?php if ( sizeof( $order->get_items() ) > 0 ) { foreach( $order->get_items() as $item ) { $_product = apply_filters( 'woocommerce_order_item_product', $order->get_product_from_item( $item ), $item ); $item_meta = new WC_Order_Item_Meta( $item['item_meta'], $_product ); ?> <tr class="<?php echo esc_attr( apply_filters( 'woocommerce_order_item_class', 'order_item', $item, $order ) ); ?>"> <td class="product-name"> <?php
  • 将自定义字段外部链接添加到档案类别页面(Adding a custom field external link to archives category pages)
    问题 我有一个 woocommerce 网站。 首先,我想在管理产品页面上添加一个自定义字段来设置我将在我的档案类别产品页面上使用的外部 URL 。 此外,我希望在我的管理产品页面设置元框中拥有这个自定义字段。 但是我更改了所有档案页面上的链接的代码。 现在我有这段代码没有做我需要的: remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 ); add_action( 'woocommerce_before_shop_loop_item', 'mycode_woocommerce_template_loop_product_link_open', 20 ); function mycode_woocommerce_template_loop_product_link_open() { $url = 'https://www.some_domain.com/'; echo '<a href="' . $url . '">'; } 我怎样才能让它只在类别档案页面上工作? 谢谢 回答1 步骤 1 - 在管理产品页面设置元框中创建自定义字段: // Inserting a Custom Admin Field add_action(