在WooCommerce中的简短描述之前显示自定义产品字段

时间:2017-08-27 09:58:22

标签: php wordpress woocommerce custom-fields product

在简短描述之前,我在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 个答案:

答案 0 :(得分:2)

更新2:

1)您应该将其添加到简短描述而不是替换它......

正确的方法是在简短描述之前将自定义函数挂钩在 woocommerce_single_product_summary 阳离子钩子中(使用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文件中,或者放在任何插件文件中。

经过测试和工作。所以你会得到这个:

enter image description here

enter image description here

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 ) );

}