在 WooCommerce 中的简短描述之前显示自定义产品字段
Display a custom product field before short description in WooCommerce
在简短描述之前,我在 WooCommerce 中添加新字段时遇到问题。
我在 functions.php
中使用了脚本并且我的新自定义字段显示正确但是:
- 使用脚本时简短描述消失,新字段显示正常。
- 我可以编辑产品页面上某个字段的内容,但无法删除它。它始终是最后一个值。
如何在不删除产品简短描述的情况下显示此自定义字段?
如何重置此自定义字段内容?
这是我的代码:
// Add a custom Field
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' );
function woo_add_custom_general_fields() {
global $woocommerce, $post;
woocommerce_wp_text_input(
array(
'id' => '_text_field',
'label' => __( 'Termin dostawy', 'woocommerce' ),
'placeholder' => 'np: 7 dni',
'desc_tip' => 'true',
'description' => __( 'Wpisz przewidywany termin dostawy, np: 7 dni.', 'woocommerce' )
)
);
}
// Save the custom field
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );
function woo_add_custom_general_fields_save( $post_id ){
$woocommerce_text_field = $_POST['_text_field'];
if( ! empty( $woocommerce_text_field ) )
update_post_meta( $post_id, '_text_field', esc_attr( $woocommerce_text_field ) );
}
// Display the custom field
add_action('woocommerce_short_description', 'magik_custom_text', 10, 1);
function magik_custom_text()
{
global $product;
global $woocommerce, $post;
echo "Termin dostawy: ".get_post_meta( $post->ID, '_text_field', true );
}
负责显示的函数:
add_action('woocommerce_short_description', 'magik_custom_text', 10, 1);
function magik_custom_text()
{
更新二:
1) 你应该将它添加到简短描述中而不是替换它......
正确的方法是在woocommerce_single_product_summary
cation hook中hook你的自定义函数在简短描述之前(使用11到19之间的优先级):
add_action('woocommerce_single_product_summary', 'magik_custom_text', 18);
function magik_custom_text()
{
global $post;
$field_value = get_post_meta( $post->ID, '_text_field', true );
// Displaying the custom field only when is set with a value
if( ! empty( $field_value ) )
echo '<p>' . __('Termin dostawy: ', 'woocommerce') . $field_value . '</p>';
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
已经过测试并且有效。所以你会得到这个:
2) 为了能够删除您的产品自定义字段的内容,您需要替换:
if( ! empty( $woocommerce_text_field ) )
作者:
if( isset( $woocommerce_text_field ) )
在这个钩子函数中:
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );
function woo_add_custom_general_fields_save( $post_id ){
$woocommerce_text_field = $_POST['_text_field'];
if( isset( $woocommerce_text_field ) )
update_post_meta( $post_id, '_text_field', esc_attr( $woocommerce_text_field ) );
}
在简短描述之前,我在 WooCommerce 中添加新字段时遇到问题。
我在 functions.php
中使用了脚本并且我的新自定义字段显示正确但是:
- 使用脚本时简短描述消失,新字段显示正常。
- 我可以编辑产品页面上某个字段的内容,但无法删除它。它始终是最后一个值。
如何在不删除产品简短描述的情况下显示此自定义字段?
如何重置此自定义字段内容?
这是我的代码:
// Add a custom Field
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' );
function woo_add_custom_general_fields() {
global $woocommerce, $post;
woocommerce_wp_text_input(
array(
'id' => '_text_field',
'label' => __( 'Termin dostawy', 'woocommerce' ),
'placeholder' => 'np: 7 dni',
'desc_tip' => 'true',
'description' => __( 'Wpisz przewidywany termin dostawy, np: 7 dni.', 'woocommerce' )
)
);
}
// Save the custom field
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );
function woo_add_custom_general_fields_save( $post_id ){
$woocommerce_text_field = $_POST['_text_field'];
if( ! empty( $woocommerce_text_field ) )
update_post_meta( $post_id, '_text_field', esc_attr( $woocommerce_text_field ) );
}
// Display the custom field
add_action('woocommerce_short_description', 'magik_custom_text', 10, 1);
function magik_custom_text()
{
global $product;
global $woocommerce, $post;
echo "Termin dostawy: ".get_post_meta( $post->ID, '_text_field', true );
}
负责显示的函数:
add_action('woocommerce_short_description', 'magik_custom_text', 10, 1);
function magik_custom_text()
{
更新二:
1) 你应该将它添加到简短描述中而不是替换它......
正确的方法是在woocommerce_single_product_summary
cation hook中hook你的自定义函数在简短描述之前(使用11到19之间的优先级):
add_action('woocommerce_single_product_summary', 'magik_custom_text', 18);
function magik_custom_text()
{
global $post;
$field_value = get_post_meta( $post->ID, '_text_field', true );
// Displaying the custom field only when is set with a value
if( ! empty( $field_value ) )
echo '<p>' . __('Termin dostawy: ', 'woocommerce') . $field_value . '</p>';
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
已经过测试并且有效。所以你会得到这个:
2) 为了能够删除您的产品自定义字段的内容,您需要替换:
if( ! empty( $woocommerce_text_field ) )
作者:
if( isset( $woocommerce_text_field ) )
在这个钩子函数中:
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );
function woo_add_custom_general_fields_save( $post_id ){
$woocommerce_text_field = $_POST['_text_field'];
if( isset( $woocommerce_text_field ) )
update_post_meta( $post_id, '_text_field', esc_attr( $woocommerce_text_field ) );
}