gpt4 book ai didi

php - Woocommerce 3 中的自定义模板

转载 作者:可可西里 更新时间:2023-11-01 00:54:32 24 4
gpt4 key购买 nike

我正在尝试为一个 ID 为 5555 的产品制作一个单独的模板。从其页面中删除一张照片并更改 block 结构。覆盖此文件会影响所有产品页面。

wp-content\plugins\woocommerce\templates\content-single-product.php

逻辑解决方案是添加一个条件:如果产品单个 prpduct 页面的 ID 为 5555,则其页面使用另一个模板。我试过这个选项,但它不起作用。

/**
* Custom single product template.
*/

add_filter( 'single_template', 'get_custom_post_type_template' );
function get_custom_post_type_template($single_template) {
global $post;

if ($post->post_type == 'product') {
$single_template = dirname( __FILE__ ) . '/single-template.php';
}
return $single_template;
}

add_filter( 'template_include', 'portfolio_page_template', 99 );
function portfolio_page_template( $template ) {

if ( is_page( 'slug' ) ) {
$new_template = locate_template( array( 'single-template.php' ) );
if ( '' != $new_template ) {
return $new_template ;
}
}

return $template;
}

或者选项 2:删除这个钩子(Hook):

remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_images', 20 );
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 );

仅来自一个特定的产品页面:

最佳答案

Custom templates specifically since Woocommerce 3.3

Since Woocommerce 3.3 Wordpress hook template_include doesn't seem to work always, as you could see in a lot of recent related threads in StackOverFlow and somewhere else too.


The specific filter hooks related to templates for Woocommerce:


案例 1. 使用 wc_get_template_part (您的案例):

如果您查看 single-product.php 模板,content-single-product.php 模板会在这一行加载以下内容:

<?php wc_get_template_part( 'content', 'single-product' ); ?>

所以我们将使用钩子(Hook)wc_get_template_part .

假设您的自定义模板替换文件 名为content-single-product-custom.php 并且位于woocommerce 文件夹中您活跃的子主题(或事件主题)。要将此自定义模板用于特定产品 ID(5555),您需要具备以下条件:

add_filter( 'wc_get_template_part', 'custom_wc_template_part', 10, 3 );
function custom_wc_template_part( $template, $slug, $name ) {
// The specific product ID
$product_id = 5555;

// The custom template file name
$custom_template_name = 'content-single-product-custom.php';

// For a specific product ID and content-single-product.php template
if( get_the_ID() == $product_id && $slug == 'content' && $name == 'single-product' ){
$template = trailingslashit( get_stylesheet_directory() ) . 'woocommerce/' . $custom_template_name;
}
return $template;
}

此代码位于您的事件子主题(或事件主题)的 function.php 文件中。经过测试并有效。


案例 2. 使用 wc_get_template:

如果模板是通过 wc_get_template() 加载的函数,例如 single-product/meta.php,您的自定义替换模板名为 single-product/custom-meta.php (位于您的事件子主题的 woocommerce 文件夹)。要将此自定义模板用于特定产品 ID(5555),您需要具备以下条件:

add_filter( 'wc_get_template', 'custom_wc_template', 10, 5 );
function custom_wc_template( $located, $template_name, $args, $template_path, $default_path ) {
// The specific product ID
$product_id = 5555;

// The custom template file name and path
$custom_template_name = 'single-product/custom-meta.php';

if( is_product() && get_the_ID() == 37 && $template_name == 'single-product/meta.php'){
$located = trailingslashit( get_stylesheet_directory() ) . 'woocommerce/' . $custom_template_name;
}
return $located;
}

此代码位于您的事件子主题(或事件主题)的 function.php 文件中。经过测试并有效。


关于覆盖 woocommerce 模板:

关于php - Woocommerce 3 中的自定义模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51805358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com