programing

WooCommerce에서 제품 데이터를 관리하기 위해 프로그래밍 방식으로 사용자 지정 설정 탭 추가

batch 2023. 4. 1. 08:37
반응형

WooCommerce에서 제품 데이터를 관리하기 위해 프로그래밍 방식으로 사용자 지정 설정 탭 추가

다음과 같이 프로그래밍 방식으로 제품 데이터 메타박스에 설정 탭을 추가하고 싶습니다.

여기에 이미지 설명 입력

"Verzendkosten" 탭에는 Firebug(배송비)가 추가되었습니다.

Woocommerce 편집 제품 페이지 설정에 "Verzendkosten" 커스텀 탭을 프로그래밍 방식으로 추가하려면 어떻게 해야 합니까?

(데이터를 입력하려면 어떻게 해야 할까요?)

2017년 11월 갱신:

  • 일부 오류 수정, 치료 및 사용 가능한 옵션 추가
  • 마지막에 커스텀 필드 slug에 대한 '사용법'과 '명칭 규칙'을 추가했습니다.

1) 커스텀 투고 타입의 Metabox에 커스텀 탭을 만듭니다(여기서 "product"의 경우).
2) 그런 다음 필드를 추가하여 이 탭에 다른 종류의 필드를 채울 수 있습니다(각 유형의 필드를 하나씩 찾을 수 있으므로 매우 완벽한 예입니다).

마지막으로 제출 시 데이터를 저장하는 기능을 찾을 수 있습니다.

6개의 다른 커스텀필드 타입에 대해서, 시각적으로 표시되는 것은 다음과 같습니다.

사용자 정의 메타박스 제품 탭

관련 코드는 다음과 같습니다.

// Step 1 - Adding a custom tab to the Products Metabox
add_filter( 'woocommerce_product_data_tabs', 'add_shipping_costs_product_data_tab', 99 , 1 );
function add_shipping_costs_product_data_tab( $product_data_tabs ) {
    $product_data_tabs['shipping-costs'] = array(
        'label' => __( 'Shipping costs', 'my_theme_domain' ), // translatable
        'target' => 'shipping_costs_product_data', // translatable
    );
    return $product_data_tabs;
}

// Step 2 - Adding and POPULATING (with data) custom fields in custom tab for Product Metabox
add_action( 'woocommerce_product_data_panels', 'add_shipping_costs_product_data_fields' );
function add_shipping_costs_product_data_fields() {
    global $post;

    $post_id = $post->ID;

    echo '<div id="shipping_costs_product_data" class="panel woocommerce_options_panel">';

    ## THE 6 DIFFERENT FIELD TYPES

    # 1. Text input field
    woocommerce_wp_text_input( array(
        'id'            => '_input_text',
        // 'name'         => '_input_text', // (optional) for different ID attribute than name attribute
        // 'class'         => 'some-class', // (optional)
        // 'wrapper_class' => 'show_if_simple', // (optional) example here for simple products type only
        'placeholder'   => __( 'Enter some data', 'theme_domain' ), // (optional)
        'label'         => __( 'input text Label', 'theme_domain' ), // (optional)
        'description'   => __( 'input text  Description', 'theme_domain' ), // (optional)
        'desc_tip'      => true, // (optional) To show the description as a tip
        // 'data_type'     => '', // (optional formatting options) can be 'price', 'decimal', 'stock' or 'url'
        // 'type'          => '', // (optional additional custom attribute)
        // 'value'         => $value, // (optional) for a static value (can be conditionally set for $value variable)
    ) );

    // 2. Textarea input field
    woocommerce_wp_textarea_input( array(
        'id'            => '_input_textarea',
        // 'name'         => 'input_textarea', // (optional) for different ID attribute than name attribute
        'class'         => 'widefat', // (optional)
        // 'style'         => '' // (optional)
        // 'wrapper_class' => 'show_if_simple', // (optional) example here for simple products type only
        'placeholder'   => __( 'Enter some data', 'theme_domain' ), // (optional)
        'label'         => __( 'input textarea Label', 'theme_domain' ),
        'description'   => __( 'input textarea Description', 'theme_domain' ),
        'desc_tip'      => true, // (optional) To show the description as a tip
        // 'rows'          => 2, // (optional) defining number of rows
        // 'cols'          => 20, // (optional) defining number of columns
        // 'value'         => $value, // (optional) for a static value (can be conditionally set for $value variable)
    ) );

    // 3. Checkbox field
    woocommerce_wp_checkbox( array(
        'id'            => '_input_checkbox',
        // 'name'         => 'input_checkbox', // (optional) for different ID attribute than name attribute
        // 'class'         => 'some-class', // (optional)
        // 'wrapper_class' => 'show_if_simple', // (optional) example here for simple products type only
        'label'         => __( 'input checkbox Label', 'theme_domain' ),
        'description'   => __( 'input checkbox Description', 'theme_domain' ),
        'desc_tip'      => true, // (optional) To show the description as a tip
        // 'cbvalue'       => 'yes', // to make it selected by default
        // 'value'         => $value, // (optional) for a static value (can be conditionally set for $value variable)
    ) );

    // 4. Radio Buttons field
    woocommerce_wp_radio( array(
        'id'            => '_input_radio',
        // 'name'          => 'input_radio', // (optional) for different ID attribute than name attribute
        // 'class'         => 'some-class', // (optional)
        // 'wrapper_class' => 'show_if_simple', // (optional) example here for simple products type only
        'label'         => __(' ', 'my_theme_domain'),
        'description'   => __( 'input Radio Description', 'my_theme_domain' ),
        'desc_tip'      => true,
        'options'       => array(
            'option_value_1'    => __('Displayed option 1'),
            'option_value_2'    => __('Displayed option 2'),
            'option_value_3'    => __('Displayed option 3'),
        ),
        // 'value'         => $value, // (optional) for a static value (can be conditionally set for $value variable)
    ) );

    // 5. Select field
    woocommerce_wp_select( array(
        'id'                => '_select_field',
        // 'name'              => '_select_field', // (optional) for different ID attribute than name attribute
        // 'wrapper_class' => 'show_if_simple', // (optional) example here for simple products type only
        'label'         => __(' ', 'my_theme_domain'),
        'description'   => __( 'input Radio Description', 'my_theme_domain' ),
        'desc_tip'      => true,
        'options'       => array(
            ''               => __('Chose an option'), // Default empty value
            'option_value_1' => __('Displayed option 1'),
            'option_value_2' => __('Displayed option 2'),
            'option_value_3' => __('Displayed option 3')
        ),
        // 'value'         => $value, // (optional) for a static value (can be conditionally set for $value variable)
    ) );

    // 6. Hidden input field
    woocommerce_wp_hidden_input( array(
        'id'            => '_hidden_input',
        // 'name'              => '_hidden_input', // (optional) for different ID attribute than name attribute
        'class'         => 'some_class',
        // 'value'         => $value, // (optional) for a static value (can be conditionally set for $value variable)
    ) );

    echo '</div>';
}

// Step 3 - Saving custom fields data of custom products tab metabox
add_action( 'woocommerce_process_product_meta', 'shipping_costs_process_product_meta_fields_save' );
function shipping_costs_process_product_meta_fields_save( $post_id ){

    // save the text field data
    if( isset( $_POST['_input_text'] ) )
        update_post_meta( $post_id, '_input_text', esc_attr( $_POST['_input_text'] ) );

    // save the textarea field data
    if( isset( $_POST['_input_textarea'] ) )
        update_post_meta( $post_id, '_input_textarea', esc_attr( $_POST['_input_textarea'] ) );

    // save the checkbox field data
    if( isset( $_POST['_input_checkbox'] ) )
        update_post_meta( $post_id, '_input_checkbox', esc_attr( $_POST['_input_checkbox'] ) );

    // save the radio button field data
    if( isset( $_POST['_input_radio'] ) )
        update_post_meta( $post_id, '_input_radio', esc_attr( $_POST['_input_radio'] ) );

    // save the selector field data
    if( isset( $_POST['_select_field'] ) )
        update_post_meta( $post_id, '_select_field', esc_attr( $_POST['_select_field'] ) );

    // save the hidden input data
    if( isset( $_POST['_hidden_input'] ) )
        update_post_meta( $post_id, '_hidden_input', esc_attr( $_POST['_hidden_input'] ) );
}

당연히 이 기능은 작동합니다.php 파일 또는 임의의 플러그인 파일에 있는 활성 자식 테마(또는 테마)입니다.

순서 2와 3에서 같은 커스텀필드 ID(슬럭명)를 사용해야 합니다.

이 코드는 테스트되었으며 완전히 작동합니다.

2단계에서 사용자 정의 코드, 사용자 정의 변수 또는 모든 종류의 함수를 사용하여 모든 데이터에 사용자 정의 옵션을 추가할 수 있습니다.


사용.

정의된 Post ID에 대해 사용할 함수를 가져오거나 검색하려면:

$custom_field_data = get_post_meta( $post_id, '_custom_field_slug', true );

장소:

  • $post_id 현재 투고 ID(제품, 주문, 쿠폰... 포스트 유형)입니다.
  • custom_field_slug 는 커스텀 필드의 ID(slug)입니다.
  • true 또는false: 단일 값(데이터 문자열 또는 배열)을 반환할지 여부

각 분야별로 같은 과정입니다.


어드바이스 - 커스텀필드 슬러그명(커스텀필드 ID)

커스텀 필드의 슬래그 이름선두밑줄 문자()를 사용하지 않으면 데이터(Update 버튼)전송한 후 커스텀필드 Metabox에 있는 인증된 사용자가 액세스 할 수 있습니다.

스크린샷을 보세요(여기에는 커스텀 필드 슬러그가 있습니다).

사용자 지정 필드 메타박스


참고 자료:

언급URL : https://stackoverflow.com/questions/39007426/adding-programmatically-a-custom-settings-tab-to-admin-product-data-in-woocommer

반응형