Woocommerce 中产品的其他自定义维度

Luk*_*Luk 4 php wordpress product dimensions woocommerce

我有一个具有以下尺寸参数的产品:

  • 长度(Woocomerce 标准)
  • 宽度(Woocomerce 标准)
  • 身高(Woocomerce 标准)
  • 直径
  • 厚度
  • 电路

在产品编辑页面中,我只有长度、宽度、高度(Woocomerce 标准)

我想添加其他尺寸参数

如何正确添加这些额外尺寸?

有没有这样的过滤器?

Loi*_*tec 5

有多种方式\xe2\x80\xa6

\n\n

1)使用产品属性:(无需任何编码):

\n\n
    \n
  • 您应该创建 3 个新产品属性(每个属性对应一个缺少的维度)。

    \n在此输入图像描述
  • \n
  • 您应该在每个产品中使用正确的选项(显示在产品选项上)和值来设置它们。

    \n在此输入图像描述
  • \n
\n\n

优点:其他维度属性将显示在产品页面上。

\n\n

缺点:

\n\n
    \n
  • 每个属性需要为每个产品设置,每个值将成为该产品属性的一个术语。
  • \n
  • 没有特定的现有WC_Product方法来获取这些自定义产品属性(如默认维度属性)。因此,将它们移出产品页面将会更加复杂。
  • \n
\n\n
\n\n

2)使用自定义设置字段:

\n\n
// Add custom fields to product shipping tab\nadd_action( \'woocommerce_product_options_dimensions\', \'add_product_options_other_dimensions\');\nfunction add_product_options_other_dimensions(){\n    global $product_object;\n\n    $product_id = method_exists( $product_object, \'get_id\' ) ? $product_object->get_id() : $product_object->id;\n\n    echo \'</div><div class="options_group">\'; // New option group\n\n    woocommerce_wp_text_input( array(\n        \'id\'          => \'_diameter\',\n        \'label\'       => __( \'Diameter\', \'woocommerce\' ),\n        \'desc_tip\'    => \'true\',\n        \'description\' => __( \'Diameter description help.\', \'woocommerce\' )\n    ) );\n\n    woocommerce_wp_text_input( array(\n        \'id\'          => \'_thickness\',\n        \'label\'       => __( \'Thickness\', \'woocommerce\' ),\n        \'desc_tip\'    => \'true\',\n        \'description\' => __( \'Thickness description help.\', \'woocommerce\' )\n    ) );\n\n    woocommerce_wp_text_input( array(\n        \'id\'          => \'_circuit\',\n        \'label\'       => __( \'Circuit\', \'woocommerce\' ),\n        \'desc_tip\'    => \'true\',\n        \'description\' => __( \'Circuit description help.\', \'woocommerce\' )\n    ) );\n\n}\n\n// Save the custom fields values as meta data\nadd_action( \'woocommerce_process_product_meta\', \'save_product_options_other_dimensions\' );\nfunction save_product_options_other_dimensions( $post_id ){\n\n    if( isset( $_POST[\'_diameter\'] ) )\n        update_post_meta( $post_id, \'_diameter\', esc_attr( $_POST[\'_diameter\'] ) );\n\n    if( isset( $_POST[\'_thickness\'] ) )\n        update_post_meta( $post_id, \'_thickness\', esc_attr( $_POST[\'_thickness\'] ) );\n\n    if( isset( $_POST[\'_circuit\'] ) )\n        update_post_meta( $post_id, \'_circuit\', esc_attr( $_POST[\'_circuit\'] ) );\n\n}\n\n// Add custom fields to product variation settings\nadd_action( \'woocommerce_product_after_variable_attributes\',\'add_variation_options_other_dimensions\', 10, 3 );\nfunction add_variation_options_other_dimensions( $loop, $variation_data, $variation ){\n\n    $variation_diameter = get_post_meta($variation->ID,"_diameter", true );\n    if( ! $variation_diameter ) $variation_diameter = "";\n\n    $variation_thickness = get_post_meta($variation->ID,"_thickness", true );\n    if( ! $variation_thickness ) $variation_thickness = "";\n\n    $variation_circuit = get_post_meta($variation->ID,"_circuit", true );\n    if( ! $variation_circuit ) $variation_circuit = "";\n\n    echo \'<p class="form-field dimensions_field">\';\n\n    woocommerce_wp_text_input( array(\n        \'id\'          => \'_diameter\' . \'_\' . $loop,\n        \'label\'       => __( \'Diameter\', \'woocommerce\' ),\n        \'desc_tip\'    => \'true\',\n        \'description\' => __( \'Diameter description help.\', \'woocommerce\' ),\n        \'value\'       => $variation_diameter\n    ) );\n\n    woocommerce_wp_text_input( array(\n        \'id\'          => \'_thickness\' . \'_\' . $loop,\n        \'label\'       => __( \'Thickness\', \'woocommerce\' ),\n        \'desc_tip\'    => \'true\',\n        \'description\' => __( \'Thickness description help.\', \'woocommerce\' ),\n        \'value\'       => $variation_thickness\n    ) );\n\n    woocommerce_wp_text_input( array(\n        \'id\'          => \'_circuit\' . \'_\' . $loop,\n        \'label\'       => __( \'Circuit\', \'woocommerce\' ),\n        \'desc_tip\'    => \'true\',\n        \'description\' => __( \'Circuit description help.\', \'woocommerce\' ),\n        \'value\'       => $variation_circuit\n    ) );\n\n    echo \'</p>\';\n}\n\n\n// Save product variation custom fields values\nadd_action( \'woocommerce_save_product_variation\',\'save_variation_options_other_dimensions\', 10 ,2 );\nfunction save_variation_options_other_dimensions( $variation_id, $loop ){\n\n    $built_lenght = $_POST["_diameter_$loop"];\n    if( isset($built_lenght) )\n        update_post_meta( $variation_id, \'_built_lenght\', esc_attr($built_lenght) );\n\n    $built_width = $_POST["_thickness_$loop"];\n    if( isset($built_width) )\n        update_post_meta( $variation_id, \'_built_width\', esc_attr($built_width) );\n\n    $built_height = $_POST["_circuit_$loop"];\n    if( isset($built_height) )\n        update_post_meta( $variation_id, \'_built_height\', esc_attr($built_height) );\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

此代码位于活动子主题(或主题)的 function.php 文件中。

\n\n

您将获得以下产品:

\n\n

在此输入图像描述

\n\n

对于产品变体(在可变产品“变体设置”中):

\n\n

在此输入图像描述

\n\n

现在要显示并获取这些值,您必须按照本文档中的说明通过主题覆盖 woocommerce 模板。

\n\n

通过主题复制和覆盖的文件是:single-product/product-attributes.phptemplate.txt。

\n\n

您必须向其中添加一些代码,以便在显示的默认尺寸之后显示自定义的附加尺寸标签和值。

\n\n

要输出正确的值,您将使用get_post_meta()函数。

\n\n

例如,要显示diameter您将使用的值:

\n\n
<?php echo get_post_meta( $product->get_id(), \'_diameter\', true ); ?>\n
Run Code Online (Sandbox Code Playgroud)\n