source

wc-template-functions 내에서 WooCommerce 함수를 변경할 수 있습니까?php' 파일 또는 'functions'를 계속 사용할까요?php' 파일?

ittop 2023. 3. 23. 23:12
반응형

wc-template-functions 내에서 WooCommerce 함수를 변경할 수 있습니까?php' 파일 또는 'functions'를 계속 사용할까요?php' 파일?

왜 WooCommerce의 기능 수정을 테마의 '기능' 안에 배치하는 것이 선호되는가?php' 파일?초과 근무로 인해 파일이 상당히 커질 수 있습니다.저는 일반적으로 훨씬 더 큰 파일보다 더 잘 정리된 작은 파일을 많이 갖는 것이 더 낫다고 생각합니다.

이 점을 염두에 두고 wc-template-functions를 복사하면 어떤 문제가 발생합니까?php' 및 'wc-syslog-syslog.syslog' 파일을 테마에 포함시키고(파일 계층을 유지하며) 이 파일들을 적절히 수정합니다.

덧붙여, 상대적인 초보자로부터 WooCommerce 플랫폼에 이르기까지, 파일, 후크, 액션, 템플릿의 모든 동작에 대한 아래의 이해에 대해서, 「네, 동작합니다」또는 「아닙니다」라고 대답할 수 있으면 고맙겠습니다.

이해:

  1. WooCommerce 함수는 'wc-template-functions'에 등록되어 있습니다.php' 파일입니다.이 설명의 목적상, 저는 다음 사항을 참고하고 싶습니다.woocommerce_breadcrumb엔트리를 입력합니다.
  2. WooCommerce는 'wc-templates-hooks.php' 파일을 사용하여 다음과 같은 일반적인 엔트리를 사용하여 등록된 함수를 호출합니다.add_action('woocommerce_before_main_content','woocommerce_breadcrumb', 20, 0 );이것은 간단히 지시한다.woocommerce_breadcrumb부르다woocommerce_before_main_content갈고리를 채우다
  3. 그 후 WooCommerce는 다음을 수행하여 위의 내용을 출력할 수 있습니다.do_action( 'woocommerce_before_main_content' );필요한 경우이 경우 모든 템플릿파일 내에 있습니다.

하나, 둘, 셋 당신의 이해는 옳습니다.

단, 파일은wc-template-functions.php그리고.wc-templates-hooks.php테마에 유사한 파일을 배치해도 덮어쓰지 않기 때문에 테마에 파일을 배치해도 아무 것도 할 수 없습니다.

또한 특정 항목을 변경하고 싶을 때 파일을 일괄 복사/재지정하는 것도 좋지 않다고 생각합니다.클라이언트의 사이트가 크래시 되었을 때 유지해야 할 실제 변경을 찾기 위해 WooCommerce 템플릿 폴더 전체를 검색해야 했습니다.

분리하는 것은 문제될 것이 없습니다.functions.php파일을 더 작고 관리하기 쉬운 파일로 만들 수 있습니다.그래서, 당신은...woocommerce-functions.phpWooCommerce 고유의 코드를 저장할 파일 이름을 지정합니다.

편집하여 몇 가지 생각을 확장합니다.

언제든지 WooCommerce(또는 WordPress 함수)에서 다음과 같은 패턴을 볼 수 있습니다.

if ( ! function_exists( 'some_function_name' ) ) {

    function some_function_name() {
        echo 'taco';
    }
}

이 을 테마의 '', '마음대로', '마음대로'에 .function.php의 WooCommerce를 합니다.some_function_name().

단, 플러그 가능 기능은 잠긴 위치에 잠기므로 테마/플러그인으로 재정의하여 이동할 수 없습니다.따라서 더 강력한 접근법은 후크에서 기능을 제거하고 다른 후크에 다시 추가하거나 사용자 지정 기능을 추가하거나 둘 다 추가하는 것입니다.다음은 사용자 지정 제목을 가격 이후로 이동하는 예입니다.

function kia_switch_loop_title(){
    remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 );
    add_action( 'woocommerce_after_shop_loop_item_title', 'kia_template_loop_product_title', 15 );
}
add_action( 'woocommerce_before_shop_loop_item', 'kia_switch_loop_title' );

function kia_template_loop_product_title() {
    echo '<h4 class="we-do-what-we-want">' . get_the_title() . '</h4>';
}

관련 제품을 어떻게 분류해야 할지 고민하다가 해결책을 찾았습니다.누군가 필요할 때를 대비해서

function custom_remove_hook(){
    remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 );
    add_action( 'woocommerce_after_single_product_summary', 'custom_function_to_sort_related', 22 );
}
add_action( 'woocommerce_after_single_product_summary', 'custom_remove_hook' );

function custom_function_to_sort_related( $args = array() ) {
        global $product;

        if ( ! $product ) {
            return;
        }

        $defaults = array(
            'posts_per_page' => 4,
            'columns'        => 4,
            'orderby'        => 'price', // @codingStandardsIgnoreLine.
            'order'          => 'desc'
        );

        $args = wp_parse_args( $args, $defaults );

        // Get visible related products then sort them at random.
        $args['related_products'] = array_filter( array_map( 'wc_get_product', wc_get_related_products( $product->get_id(), $args['posts_per_page'], $product->get_upsell_ids() ) ), 'wc_products_array_filter_visible' );

        // Handle orderby.
        $args['related_products'] = wc_products_array_orderby( $args['related_products'], $args['orderby'], $args['order'] );

        // Set global loop values.
        wc_set_loop_prop( 'name', 'related' );
        wc_set_loop_prop( 'columns', apply_filters( 'woocommerce_related_products_columns', $args['columns'] ) );

        wc_get_template( 'single-product/related.php', $args );
    }

언급URL : https://stackoverflow.com/questions/42334598/can-i-modify-woocommerce-functions-within-the-wc-template-functions-php-file-o

반응형