【问题标题】:Display a custom product field before short description in WooCommerce在 WooCommerce 中的简短描述之前显示自定义产品字段
【发布时间】:2018-02-04 19:45:18
【问题描述】:

在简短说明之前,我在 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()
{

【问题讨论】:

    标签: php wordpress woocommerce custom-fields product


    【解决方案1】:

    更新 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 文件或任何插件文件中。

    经过测试并且有效。所以你会得到这个:


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

    【讨论】:

    • 你是最棒的!它比我想要的要好。附加问题:您可以添加脚本:不显示空字段吗?
    • @interlaw 是的,当然,我已经更新了这个答案中的第一个函数,请尝试一下……
    • 我非常感谢你为我所做的一切,@loictheaztec :)
    猜你喜欢
    • 2018-11-23
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 2021-06-22
    • 2021-02-28
    • 1970-01-01
    相关资源
    最近更新 更多