programing

Woocommerce의 "Choose an option" 버튼 텍스트를 변경하려면 어떻게 해야 합니까?

css3 2023. 3. 16. 21:44

Woocommerce의 "Choose an option" 버튼 텍스트를 변경하려면 어떻게 해야 합니까?

이 PHP 코드를 변경하려면 어떻게 해야 합니까 WordPress용 Woocommerce 플러그인의 선택 요소 ID에 따라 옵션을 선택하십시오.wc-template-function에서 올바른 PHP 파일을 찾은 것 같습니다.php 하지만 PHP 스킬 부족이 발목을 잡고 있습니다.지금까지의 내용은 다음과 같습니다.

if ( ! function_exists( 'wc_dropdown_variation_attribute_options' ) ) {

    /**
     * Output a list of variation attributes for use in the cart forms.
     *
     * @param array $args
     * @since 2.4.0
     */
    function wc_dropdown_variation_attribute_options( $args = array() ) {
        $args = wp_parse_args( $args, array(
            'options'          => false,
            'attribute'        => false,
            'product'          => false,
            'selected'         => false,
            'name'             => '',
            'id'               => '',
            'class'            => '',
            'show_option_none' => __( 'Choose an option', 'woocommerce' ),
            'show_option_color' => __( 'Choose a color', 'woocommerce' ),
            'show_option_size' => __( 'Choose a size', 'woocommerce' )
        ) );

        $options   = $args['options'];
        $product   = $args['product'];
        $attribute = $args['attribute'];
        $name      = $args['name'] ? $args['name'] : 'attribute_' . sanitize_title( $attribute );
        $id        = $args['id'] ? $args['id'] : sanitize_title( $attribute );
        $class     = $args['class'];

        if ( empty( $options ) && ! empty( $product ) && ! empty( $attribute ) ) {
            $attributes = $product->get_variation_attributes();
            $options    = $attributes[ $attribute ];
        }

        echo '<select id="' . esc_attr( $id ) . '" class="' . esc_attr( $class ) . '" name="' . esc_attr( $name ) . '" data-attribute_name="attribute_' . esc_attr( sanitize_title( $attribute ) ) . '">';

        if ( $args['show_option_none'] ) {
            echo '<option value="">' . esc_html( $args['show_option_none'] ) . '</option>';
        }
        if ( $args['$id_colors'] ) {
            echo '<option value="">' . esc_html( $args['show_option_color'] ) . '</option>';
        }
        if ( $args['$id_sizes'] ) {
            echo '<option value="">' . esc_html( $args['show_option_size'] ) . '</option>';
        }

        if ( ! empty( $options ) ) {
            if ( $product && taxonomy_exists( $attribute ) ) {
                // Get terms if this is a taxonomy - ordered. We need the names too.
                $terms = wc_get_product_terms( $product->id, $attribute, array( 'fields' => 'all' ) );

                foreach ( $terms as $term ) {
                    if ( in_array( $term->slug, $options ) ) {
                        echo '<option value="' . esc_attr( $term->slug ) . '" ' . selected( sanitize_title( $args['selected'] ), $term->slug, false ) . '>' . apply_filters( 'woocommerce_variation_option_name', $term->name ) . '</option>';
                    }
                }
            } else {
                foreach ( $options as $option ) {
                    // This handles < 2.4.0 bw compatibility where text attributes were not sanitized.
                    $selected = sanitize_title( $args['selected'] ) === $args['selected'] ? selected( $args['selected'], sanitize_title( $option ), false ) : selected( $args['selected'], $option, false );
                    echo '<option value="' . esc_attr( $option ) . '" ' . $selected . '>' . esc_html( apply_filters( 'woocommerce_variation_option_name', $option ) ) . '</option>';
                }
            }
        }

        echo '</select>';
    }
}

어레이에 show_option_color 및 show_option_size를 추가하고 if 문을 추가하려고 했지만 동작하지 않는 것 같습니다.선택 요소의 ID를 참조하여 올바른 선택 요소인지 여부에 따라 if 문을 작성하는 방법을 잘 모르겠습니다.

이것이 제가 목표로 하는 HTML입니다.

<select id="sizes" class="" name="attribute_sizes" data-attribute_name="attribute_sizes">Want this to say Choose a size</select>

<select id="colors" class="" name="attribute_sizes" data-attribute_name="attribute_sizes">Want this to say Choose a color</select>

변수.php 코드 행 27 - 38:

<?php foreach ( $attributes as $attribute_name => $options ) : ?>
                    <tr>
                        <td class="label"><label for="<?php echo sanitize_title( $attribute_name ); ?>"><?php echo wc_attribute_label( $attribute_name ); ?></label></td>
                        <td class="value">
                            <?php
                                $selected = isset( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ? wc_clean( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) : $product->get_variation_default_attribute( $attribute_name );
                                wc_dropdown_variation_attribute_options( array( 'options' => $options, 'attribute' => $attribute_name, 'product' => $product, 'selected' => $selected ) );
                                echo end( $attribute_keys ) === $attribute_name ? '<a class="reset_variations" href="#">' . __( 'Clear selection', 'woocommerce' ) . '</a>' : '';
                            ?>
                        </td>
                    </tr>
                <?php endforeach;?>

이것은 커스텀 필터에 최적인 사용 사례입니다!먼저 가장 빠른 방법이 아닌 방법을 설명하겠습니다만, 코드를 읽어야 하는 다른 사람이 이해하기 가장 쉽고 깨끗한 방법입니다.또, 시간이 촉박할 때는, 「더러운」방법에 대해서도 설명하겠습니다.

빠른 방법:

이 정보가 표시되는 위치는 다음 파일에 있습니다.

/wp-content/plugins/woocommerce/templates/single-product/add-to-cart/variable.php

사용하시는 WooCommerce 버전에 따라 27호선 부근에 다음과 같은 행이 표시됩니다.

<option value=""><?php echo __( 'Choose an option', 'woocommerce' ) ?>&hellip;</option>

__() 함수는 'woocommerce' 텍스트 도메인을 사용하여 WordPress의 번역 시스템을 통해 첫 번째 매개 변수를 실행합니다.번역의 가능성을 유지하는 것이 가장 좋기 때문에, 번역 기능을 사용해 송신하기 전에 이 텍스트를 변경하고 싶다고 생각하고 있습니다.

이 코드 행은 모든 제품 변동 속성을 출력하는 루프 중에 발생합니다.이를 통해 $name 변수를 보고 어떤 속성이 출력되었는지 쉽게 확인할 수 있습니다.

$name 변수를 받아들여 이를 기반으로 문자열을 출력하는 함수를 만들어야 합니다.다음과 같이 됩니다.

function get_text_for_select_based_on_attribute($attribute) {

// Find the name of the attribute for the slug we passed in to the function
$attribute_name = wc_attribute_label($attribute);

// Create a string for our select
$select_text = 'Select a ' . $attribute_name;

// Send the $select_text variable back to our calling function
return $select_text;
}

변수 27행의 코드 앞에.php, 다음과 같은 것을 넣을 수 있습니다.

<?php 

  $select_text = get_text_for_select_based_on_attribute($name);

?>

그런 다음 $select_text 변수와 'Choose an option'을 맞바꾸기만 하면 됩니다.

<option value=""><?php echo __( $select_text, 'woocommerce' ) ?>&hellip;</option>

이 모든 작업을 템플릿 덮어쓰기로 하는 것을 잊지 마십시오.그렇지 않으면 다음 업데이트 시 커스터마이즈가 손실됩니다.

http://docs.woothemes.com/document/template-structure/

청소 방법:

이를 위해 보다 효율적이고 확장 가능한 방법은 이를 통과시키기 위한 사용자 정의 필터를 추가하는 것입니다.몇 가지 추가 절차이지만 제품에 따라 개별적으로 기능을 덮어쓰려는 경우 커스텀 로직을 쉽게 추가할 수 있습니다.

먼저 의미심장한 이름의 커스텀필터를 만들어 기능 어딘가에 배치합니다.주제 php 파일:

add_filter('variable_product_select_text', 'get_text_for_select_based_on_attribute', 10, 1);

그 다음에 변수에서.php 파일은 함수를 직접 호출하는 대신 새 필터를 통과시킵니다.

$select_text = apply_filters('variable_product_select_text', $name);

이와 같은 경우에 커스텀필터를 설정하는 데 시간이 좀 걸리지만 기존 코드를 더 이상 수정할 필요 없이 기능을 쌓거나 끌 수 있기 때문에 유지보수가 용이하다는 장점이 있습니다.

WC 2.4 업데이트

WooCommerce 버전 2.4에서는 속성과 관련 선택을 얻는 다른 방법이 도입되었습니다.아직 필터를 제공하지 않았기 때문에 위의 방법으로 wc_dropdown_variation_attribute_options 함수를 덮어쓸 것을 권장합니다.따라서 전체 기능을 복사하여 테마 기능에 붙여넣을 수 있습니다.선언문부터 시작하는 php 파일, 색상이나 크기가 아닌 경우 선택한 텍스트에 변수를 추가합니다.

//Don't include the if(!function_exists(...) part.

wc_dropdown_variation_attribute_options($args = array()) {
  // Uses the same function as above, or optionally a custom filter
  $select_text = get_text_for_select_based_on_attribute($args['attribute']);

  wc_dropdown_variation_attribute_options( $args = array() ) {
    $args = wp_parse_args( $args, array(
        'options'          => false,
        'attribute'        => false,
        'product'          => false,
        'selected'         => false,
        'name'             => '',
        'id'               => '',
        'class'            => '',
        'show_option_none' => __( $select_text, 'woocommerce' ),
        'show_option_color' => __( 'Choose a color', 'woocommerce' ),
        'show_option_size' => __( 'Choose a size', 'woocommerce' )
    ) );
// Put the rest of the function here

여기 있는 다른 답변들을 조합하여 이 작업을 수행했는데, 제게는 잘 작동했습니다.

이것은 WooCoommerce 3.3.5를 사용하여 이루어졌으며 필터가 비교적 최근에 추가되었다고 가정합니다.

는 ''에 합니다.wc_dropdown_variation_attribute_options()★★★★★★ 。

// define the woocommerce_dropdown_variation_attribute_options_args callback 
function filter_woocommerce_dropdown_variation_attribute_options_args( $array ) { 

    // Find the name of the attribute for the slug we passed in to the function
    $attribute_name = wc_attribute_label($array['attribute']);

    // Create a string for our select
    $select_text = 'Select a ' . $attribute_name;

    $array['show_option_none'] = __( $select_text, 'woocommerce' );
    return $array; 
}; 

// add the filter 
add_filter( 'woocommerce_dropdown_variation_attribute_options_args', 'filter_woocommerce_dropdown_variation_attribute_options_args', 10, 1 ); 

이게 도움이 됐으면 좋겠네요.

나는 WC 2.5로 방법을 찾았다.이것을 함수에 추가합니다.php:

function my_dropdown_variation_attribute_options_html($html, $args){
    $html = str_replace('Choose an option', 'Choose', $html);
    return $html;
}
add_filter('woocommerce_dropdown_variation_attribute_options_html', 'my_dropdown_variation_attribute_options_html', 10, 2);

실제로 커스터마이즈 할 수 있는 더 쉬운 방법이 있습니다.

WC의 핵심 파일 wc-template-functions를 보시면 됩니다.php wc_syslog_syslogs_syslogs 함수 내의 배열은 실제로 다음과 같은 키 값 쌍을 가진 인수임을 알 수 있습니다.

'options'          => false,
'attribute'        => false,
'product'          => false,
'selected'         => false,
'name'             => '',
'id'               => '',
'class'            => '',
'show_option_none' => __( 'Choose an option', 'woocommerce' )

이제 변수 함수에서 동일한 키 값 쌍을 변경하기만 하면 됩니다.php 템플릿파일그래서 Choose An Option 텍스트 대신 드롭다운라벨을 표시하고 싶어서 fu를 변경합니다.

wc_dropdown_variation_attribute_options(
    array(
         'options' => $options,
         'attribute' => $attribute_name,
         'product' => $product,
         'selected' => $selected,
         'show_option_none' => wc_attribute_label( $attribute_name )
    )
);

다른 쌍들도 마찬가지입니다.이게 도움이 됐으면 좋겠군덧붙여서, 이것은 WC 2.4+에서만 동작하므로 주의해 주세요.

여기 WC > 2.4에 대한 매우 간단한 솔루션이 있습니다.이 솔루션에서는 함수를 다시 쓰거나 함수를 복잡하게 만들지 않습니다.php..

변수를 추가합니다.php 파일을 테마에 맞춥니다(http://docs.woothemes.com/document/template-structure/), 및 (27행부터) 변경해 주세요.

<?php foreach ( $attributes as $attribute_name => $options ) : ?>
<tr>
    <td class="label"><label for="<?php echo sanitize_title( $attribute_name ); ?>"><?php echo wc_attribute_label( $attribute_name ); ?></label></td>
    <td class="value">
        <?php
            $selected = isset( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ? wc_clean( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) : $product->get_variation_default_attribute( $attribute_name );
            wc_dropdown_variation_attribute_options( array( 'options' => $options, 'attribute' => $attribute_name, 'product' => $product, 'selected' => $selected ) );
            echo end( $attribute_keys ) === $attribute_name ? '<a class="reset_variations" href="#">' . __( 'Clear selection', 'woocommerce' ) . '</a>' : '';
        ?>
    </td>
</tr><?php endforeach;?>

다음과 같이 입력합니다.

<?php 
$variations_arr = array();
foreach ( $attributes as $attribute_name => $options ) : 
    ob_start(); ?>
    <tr>
        <td class="label"><label for="<?php echo sanitize_title( $attribute_name ); ?>"><?php echo wc_attribute_label( $attribute_name ); ?></label></td>
        <td class="value">
            <?php $selected = isset( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ? wc_clean( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) : $product->get_variation_default_attribute( $attribute_name );
            wc_dropdown_variation_attribute_options( array( 'options' => $options, 'attribute' => $attribute_name, 'product' => $product, 'selected' => $selected ) );
            echo end( $attribute_keys ) === $attribute_name ? '<a class="reset_variations" href="#">' . __( 'Clear selection', 'woocommerce' ) . '</a>' : ''; ?>
        </td>
    </tr>
    <?php $variations_ob = ob_get_clean();
    $variations_arr[wc_attribute_label($attribute_name)] = $variations_ob;
endforeach;

foreach ($variations_arr as $name => $ob) {
    echo str_ireplace('choose an option', 'Choose '.$name, $ob );
} ?>

그러면 속성의 이름에 따라 'Choose an option'이 'Choose Size', 'Choose Color' 등으로 대체됩니다.

Woocommerce의 "Choose an option" 드롭다운 텍스트를 변경하려면 함수에 다음을 추가하십시오.테마에 php 파일이 있습니다.

add_filter('woocommerce_dropdown_variation_attribute_options_args', 'my_change_choose_an_option_text_func', 10, 2);

function my_change_choose_an_option_text_func($args){ 
    $args['show_option_none'] = __( 'New Text', 'your_text_domain' ); 
    return $args; 
}

"Choose an option(옵션 선택)"을 대응하는 속성/변동 이름으로 대체하는 방법을 알고 싶다면 다음과 같이 하십시오.변수를 편집합니다.php 및 아래와 같은 코드를 찾습니다.

variable.php(wp-content/plugins/woocommerce/includes/variable.php) 파일을 열고 woocommerce로 변경합니다(행 41에서43으로). (이 3줄 코드 삭제)

$selected = isset( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ? wc_clean( urldecode( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ) : $product->get_variation_default_attribute( $attribute_name );
wc_dropdown_variation_attribute_options( array( 'options' => $options, 'attribute' => $attribute_name, 'product' => $product, 'selected' => $selected ) );
echo end( $attribute_keys ) === $attribute_name ? apply_filters( 'woocommerce_reset_variations_link', '<a class="reset_variations" href="#">' . __( 'Clear', 'woocommerce' ) . '</a>' ) : '';

그런 다음 이 코드를 추가합니다.

wc_dropdown_variation_attribute_options
array( 'options' => $options,
'attribute' => $attribute_name,
'product' => $product,
'selected' => $selected,
'show_option_none'=> wc_attribute_label( $attribute_name )
) );

모든 WordPress 버전이 작동합니다. 감사합니다.

아직 관심 있는 사람을 위해 만든 코드 업데이트

add_filter( 'woocommerce_dropdown_variation_attribute_options_args', 
fix_option', 10 ); 
function fix_option( $args ) {
    $attr = get_taxonomy( $args['attribute'] ); 
    $label = $attr->labels->name; 
    $fix = str_replace('Product', '', $label); 
    $fix = strtolower($fix); /
    $args['show_option_none'] = apply_filters( 'the_title', 'Select a '.$fix ); 
}

언급URL : https://stackoverflow.com/questions/32170575/how-do-i-change-button-text-from-choose-an-option-in-woocommerce