Отображение настраиваемого поля под кратким описанием на страницах отдельных продуктов Woocommerce

В woocommerce я использую код для добавления Metabox с настраиваемым полем на страницах редактирования продукта.

Как я могу отобразить значение этого настраиваемого поля под кратким описанием на страницах отдельных продуктов?

Вот мой код:

add_action ('add_meta_boxes','add_info_meta_box');
function add_info_meta_box()
{
    add_meta_box('new_meta', 'info','info_meta_fields_output','product', 'side');
}


function info_meta_fields_output($post)
{
    $new_meta = get_post_meta($post->ID,'_new_meta',true);
    echo ('<label for="new_meta"> Custom Text </label>');
    echo ('<input type="text" id="new_meta" name="new_meta" value="'.esc_attr($new_meta).'"/>');
}

add_action('save_post','save_info_meta_box');
function save_info_meta_box($post_id)
{
    $new_meta=sanitize_text_field($_POST['new_meta']);
    update_post_meta ($post_id,'_new_meta',$new_meta);
}


// Displaying the value on single product pages
function meta_product($product_id) {

    $new_meta2 = get_post_meta(get_the_ID(),'_new_meta', true);
    echo ('<p id="value-on-single-product">' . $new_meta2 . '</p>');
}
add_action('woocommerce_single_product_summary', 'meta_product',30);

Но он не отображает значение настраиваемого поля.


person Duc Phuli    schedule 29.01.2018    source источник
comment
Привет и добро пожаловать в StackOverflow. Найдите время, чтобы прочитать страницу справки, особенно разделы с названиями Какие темы я могу задать здесь? и Каких типов вопросов мне следует избегать?. И что еще более важно, прочтите контрольный список вопросов о переполнении стека. Вы также можете узнать о минимальных, полных и проверяемых примерах.   -  person Clijsters    schedule 29.01.2018


Ответы (1)


Обновлено (добавлено второе настраиваемое поле, как указано в комментариях)

Вы должны попробовать следующее, что установит ваше настраиваемое поле на общей вкладке продукта Metabox и отобразит это значение настраиваемого поля под кратким описанием продукта:

// Add the custom field
add_action( 'woocommerce_product_options_general_product_data', 'add_custom_field_to_general_product_metabox' );
function add_custom_field_to_general_product_metabox() {
    global $post;

    // Get the selected value
    $value = get_post_meta( $post->ID, '_new_meta', true );
    if( empty( $value ) ) $value = ''; // Default value

    woocommerce_wp_text_input( array(
        'id'       => 'new_meta',
        'label'    => __( 'Thông tin thêm', 'woocommerce' ),
        'placeholder'       => __( '', 'woocommerce' ),
        'description'       => __( '', 'woocommerce' ),
        'value'   => $value, // Displaying the selected value
    ) );


    // Get the selected value
    $value2 = get_post_meta( $post->ID, '_new_meta2', true );
    if( empty( $value2 ) ) $value2 = ''; // Default value

    woocommerce_wp_text_input( array(
        'id'       => 'new_meta2',
        'label'    => __( 'Thông tin thêm', 'woocommerce' ),
        'placeholder'       => __( '', 'woocommerce' ),
        'description'       => __( '', 'woocommerce' ),
        'value'   => $value2, // Displaying the selected value
    ) );
}

// Save the custom field
add_action( 'woocommerce_process_product_meta', 'save_custom_field_to_general_product_metabox' );
function save_custom_field_to_general_product_metabox( $post_id ){

    if( isset( $_POST['new_meta'] ) )
        update_post_meta( $post_id, '_new_meta', esc_attr( $_POST['new_meta'] ) );

    if( isset( $_POST['new_meta2'] ) )
        update_post_meta( $post_id, '_new_meta2', esc_attr( $_POST['new_meta2'] ) );
}


// Displaying the custom field value (on single product pages under short description)
add_action('woocommerce_single_product_summary', 'display_custom_meta_field_value', 25 );
function display_custom_meta_field_value() {
    global $product;

    $custom_field = get_post_meta( $product->get_id(),'_new_meta', true );
    if( ! empty( $custom_field ) )
        echo  '<p id="value-on-single-product">' . $custom_field . '</p>';

    $custom_field2 = get_post_meta( $product->get_id(),'_new_meta2', true );
    if( ! empty( $custom_field2 ) )
        echo '<p id="value-on-single-product">' . $custom_field2 . '</p>';
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы).

Проверено и работает.

person LoicTheAztec    schedule 29.01.2018
comment
Привет, тоже профи. Как скрыть id p id = value-on-single-product, когда данные не введены, и вы можете добавить строку данных, чтобы отобразить больше. Спасибо. - person Duc Phuli; 29.01.2018
comment
Здравствуйте, я использую этот код для отображения 2 настраиваемых полей. Можно как-то объединить два в один, спасибо большое. - person Duc Phuli; 31.01.2018
comment
Я использую отдельно, вы можете мне помочь? // Добавляем настраиваемое поле 1 и // Добавляем настраиваемое поле 2 - person Duc Phuli; 31.01.2018
comment
Я не знаю, как включить 2 настраиваемых поля как 1 - person Duc Phuli; 31.01.2018
comment
Очень быстро, спасибо. Я отправил свои выражения через gmail, но ответ - помощь. Спасибо. На следующей неделе я сделаю вам пожертвование. - person Duc Phuli; 31.01.2018
comment
@DucPhuli Хорошо, это была опечатка с одним }, который нужно удалить ... попробуйте еще раз ... Теперь он работает (проверено). - person LoicTheAztec; 31.01.2018
comment
Спасибо, заработал. Я пытаюсь добавить тег класса оболочки, но он всегда появляется, когда не добавляются настраиваемые поля. Как отображать только при наличии настраиваемых полей? Спасибо за помощь. - person Duc Phuli; 01.02.2018