向WooCommerce产品添加自定义文本区

时间:2019-04-09 作者:hedburgaren

我店里的一些产品有很长的描述。因此,我只想使用主描述作为基本描述,并为技术规格添加一个额外选项卡。

我正在使用主WooCommerce导入工具导入我的产品,如果我可以在导入期间将技术规格添加到正确的选项卡中,那将是非常棒的。

下面的代码实现了这个技巧,但它将HTML保存为文本。我该如何改变这一点?

/**
* WooCommerce: Adds custom fields to backend
**/

// Display fields
    add_action(\'woocommerce_product_options_general_product_data\', \'woocommerce_product_custom_fields\');

// Save fields
    add_action(\'woocommerce_process_product_meta\', \'woocommerce_product_custom_fields_save\');

function woocommerce_product_custom_fields()
{
    global $woocommerce, $post;
    echo \'<div class="product_custom_field">\';

    //Custom Product  Textarea
    woocommerce_wp_textarea_input(
        array(
            \'id\' => \'_custom_product_textarea\',
            \'placeholder\' => \'Vill du ange ytterligare information om produkten?\',
            \'label\' => __(\'Mer information\', \'woocommerce\')
        )
    );
    echo \'</div>\';
}

// Save to database
function woocommerce_product_custom_fields_save($post_id)
{
// Custom Product Textarea Field
    $woocommerce_custom_procut_textarea = $_POST[\'_custom_product_textarea\'];
    if (!empty($woocommerce_custom_procut_textarea))
        update_post_meta($post_id, \'_custom_product_textarea\', esc_attr($woocommerce_custom_procut_textarea));
}

/**
 * Add a custom product data tab
 */
add_filter( \'woocommerce_product_tabs\', \'woo_new_product_tab\' );
function woo_new_product_tab( $tabs ) {

    // Adds the new tab

    $tabs[\'test_tab\'] = array(
        \'title\'         => __( \'Mer information\', \'woocommerce\' ),
        \'priority\'      => 50,
        \'callback\'      => \'woo_new_product_tab_content\'

    );

    return $tabs;

}
function woo_new_product_tab_content() {
// The new tab content
echo get_post_meta(get_the_ID(), \'_custom_product_textarea\', true);
}
我猜它与update\\u post\\u meta()有关,它会清理文本?

1 个回复
最合适的回答,由SO网友:LoicTheAztec 整理而成

WooCommerce中存在一个显示错误,即在任何;“产品数据”;设置选项卡。试试看:

// Display a custom field in product admin pages
add_action( \'woocommerce_product_options_general_product_data\', \'add_product_custom_wysiwyg_field\' );
function add_product_custom_wysiwyg_field() {
    global $product_object;

    echo \'<div class="product_custom_field">
    <p>\' . __( "Mer information" ) . \'</p>
    <div style="padding:9px;">\';

    $content  = $product_object->get_meta( $meta_key );

    wp_editor( $content, \'_technical_specs\', [\'textarea_rows\' => 6] );

    echo \'</div></div>\';
}
您将得到类似的结果(它会产生一些JS错误):

enter image description here

The best way is to add a custom metabox 相反,就像产品简短描述一样:

enter image description here

因此,您重新访问的代码将改为:

// Add custom Meta box to admin products pages
add_action( \'add_meta_boxes\', \'create_product_technical_specs_meta_box\' );
function create_product_technical_specs_meta_box() {
    add_meta_box(
        \'custom_product_meta_box\',
        __( \'Technical specs\', \'cmb\' ),
        \'add_custom_content_meta_box\',
        \'product\',
        \'normal\',
        \'default\'
    );
}

// Custom metabox content in admin product pages
function add_custom_content_meta_box( $post ){
    $product = wc_get_product($post->ID);
    $content = $product->get_meta( \'_technical_specs\' );

    echo \'<div class="product_technical_specs">\';

    wp_editor( $content, \'_technical_specs\', [\'textarea_rows\' => 10]);

    echo \'</div>\';
}

// Save WYSIWYG field value from product admin pages
add_action( \'woocommerce_admin_process_product_object\', \'save_product_custom_wysiwyg_field\', 10, 1 );
function save_product_custom_wysiwyg_field( $product ) {
    if (  isset( $_POST[\'_technical_specs\'] ) )
         $product->update_meta_data( \'_technical_specs\', wp_kses_post( $_POST[\'_technical_specs\'] ) );
}

// Add "technical specs" product tab
add_filter( \'woocommerce_product_tabs\', \'add_technical_specs_product_tab\', 10, 1 );
function add_technical_specs_product_tab( $tabs ) {
    $tabs[\'test_tab\'] = array(
        \'title\'         => __( \'Mer information\', \'woocommerce\' ),
        \'priority\'      => 50,
        \'callback\'      => \'display_technical_specs_product_tab_content\'

    );

    return $tabs;
}

// Display "technical specs" content tab
function display_technical_specs_product_tab_content() {
    global $product;
    echo \'<div class="wrapper-technical_specs">\' . $product->get_meta( \'_technical_specs\' ) . \'</div>\';
}
代码进入功能。活动子主题(或主题)的php文件或任何插件文件。

相关推荐

如何让`wp-list-table`显示我在Custom-Post中的`Custom-Fields`

一切都好吗<我需要wp-list-table 也要显示custom-fields 在每个custom-post 我有,但我不知道如何做到这一点,在这幅图中,它显示了带有字段的表格:Title, Author and Publication Date: 我想要的是能够选择custom-fields 将出现,例如以下示例Title, Carta, Naipe, Author, and Date of Publication: