WooCommerce: Single-product-postslug模板不工作



首先,我知道wordpress不允许你使用模板的文章(WooCommerce的产品页面是通过文章构建的)。所以我寻找模板层次结构。这里写着:

single-{post-type}-{slug}.php(从4.4开始)。首先,WordPress为特定的文章寻找一个模板。

例如,如果post type是product, post slug是dmc-12, WordPress会查找single-product-dmc-12.php

single-{post-type}.php -如果帖子类型是product, WordPress会查找single-product.php
single.php - WordPress然后回落到single.php
singular.php -然后回落到singular.php
index.php -最后,如上所述,WordPress最终回到了index.php

所以我创建了一个模板并将其命名为single-product-ccc (ccc是我的产品的一个名称),但是没有发生任何事情,没有任何影响。
但是创建一个名为single-product的模板会影响所有的产品页面。

为什么会这样?

我不明白。即使single-2313.php ( 2313 是一个帖子的id)也会覆盖 2313 帖子的默认single.php

为什么single-product-slug不能以同样的方式工作?

谢谢。

让我先纠正你的一点。你说:"WooCommerce的产品页面是通过post"构建的。

这是不对的。WooCommerce创建了一个新的帖子类型"product"。您可以在这里看到WooCommerce创建的所有自定义帖子类型:https://docs.woocommerce.com/document/installed-taxonomies-post-types/

'product'类型使用模板single-product.php

正如你所说,WordPress模板层次文档说你可以为一个特定的产品创建一个模板:

single-{post-type}-{slug}.php(自4.4起)。首先,WordPress为特定的文章寻找模板。例如,如果post type是product, post slug是dmc-12, WordPress会查找single-product-dmc-12.php。

WooCommerce是一个WordPress插件,因此,它并不总是严格遵守WordPress规则,这是其中一个例子。但是你可以用滤镜很容易地纠正这个错误。在主题的functions.php中添加:

add_filter( 'template_include', 'custom_single_product_template_include', 50, 1 );
function custom_single_product_template_include( $template ) {
     if ( is_singular('product')  && (get_the_ID()==30)) {
           $template = get_stylesheet_directory() . '/woocommerce/single-product-30.php';
     } 
     return $template;
}

其中get_the_ID()是您的产品的id。现在,您可以创建一个新的模板,例如single-product-30.php

尝试在functions.php中添加

function your_theme_add_woocommerce_support() {
    add_theme_support( 'woocommerce' );
}
add_action( 'after_setup_theme', 'your_theme_add_woocommerce_support' );

,现在,您可以使用woocommerce/single-product.php进行定制

最新更新