【问题标题】:Woocommerce change product style and display it on a pageWoocommerce 更改产品样式并将其显示在页面上
【发布时间】:2015-07-11 03:00:19
【问题描述】:

对于我的近似英语,请提前抱歉。我想为特定产品类别更改 woocommerce 上的产品页面样式(不显示图片和其他一些重要的布局更改)。已经成功了,它可以工作,问题是我想在一个页面上显示这些产品。我尝试使用 woocommerce 集成短代码 [product_page id=$id],问题是我在 content-single-product.php (在 woocommerce 文件夹中)上创建的自定义样式和布局未使用此短代码应用。我试图在 class-ws-shortcodes.php (woocommerce 文件夹)上复制我的脚本,但没有成功。我应该怎么做才能在特定页面上显示产品,使用这些产品页面的真实样式(我创建的自定义页面),而不是 woocommerce 短代码?

提前感谢您的回答

【问题讨论】:

  • 查看网址:wordpress.org/support/topic/product-page-11 可能对您有所帮助
  • 感谢您的回答,我尝试了您的解决方案,将 term_id 替换为产品类别 ID,将“single-product-seperateCategory”替换为“single-product-custom”(我的类别和 php 文件的名称)复制到主题文件夹中)但它对我不起作用

标签: wordpress woocommerce woothemes


【解决方案1】:

有两种方法可以做到这一点,这取决于你是要编辑single-product.php还是content-single-product.php。两者都会使您获得相同的最终结果。

要执行前者,您可以使用默认的 WordPress 功能并通过template_include在给定条件下过滤模板

add_filter( 'template_include', 'so_29984159_custom_category_template' );
function so_29984159_custom_category_template( $template ){
    if ( is_single() && get_post_type() == 'product' && has_term( 'custom_category', 'product_cat' ) ) {
        $template = locate_template( 'single-product-custom.php' );
    }
    return $template;
}

或者,如果您想创建一个自定义的 content-product.php 模板部分,您可以使用 WooCommerce 的 wc_get_template_part,它的工作方式几乎相同。 从技术上讲,我认为您可以使用相同的条件逻辑,但我在这里对其进行了调整以指出 WooCommerce 在过滤器中提供的变量。

add_filter( 'wc_get_template_part', 'so_29984159_custom_content_template_part', 10, 3 );
function so_29984159_custom_content_template_part( $template, $slug, $name ){
    if ( $slug == 'content' && $name == 'product' && has_term( 'custom_category', 'product_cat' ) ) {
        $template = locate_template( 'content-product-custom.php' );
    }
    return $template;
}

在任何一种情况下,single-product-custom.phpcontent-product-custom.php 都将位于主题的根文件夹中。要将它们放在其他位置,只需更改 locate_template() 参数中的路径即可。

【讨论】:

  • 我会检查一下,谢谢你的详细回答,希望它能起作用
  • 我没有测试任何东西,所以要小心流浪;或),但我认为这个想法应该可行。
  • 我的自定义模板制作得不好(直接编辑了 content-single-product.php),所以我创建了一个 content-single-product-custom.php 文件。我替换了 wc_get_template_part( 'content', 'single-product' );在 single-product.php 中加载名为 custom 的类别的模板。更好的组织但相同的结果:example.com/product/myproduct(产品页面)使用自定义模板显示产品,但 woocommerce product_page 短代码不显示。你的代码:不确定我应该在哪里添加这个过滤器(模板加载器文件?)不习惯于钩子和过滤器,我几天才使用它们
  • 如果你使用我的第二个过滤器,你根本不需要替换wc_get_template_part( 'content', 'single-product' )。任一代码 sn-p 都属于您的主题的functions.php。如果您在理解过滤器方面需要更多帮助,我写了我认为不错的 tutorial on how to use filters
【解决方案2】:

您不能在 wordpress 的文件(即 page.php)中进行编码来修改 woocommerce 页面。它的错误方式。您只需将 WooCommerce 页面覆盖到您的主题文件夹中,然后修改您想要执行的任何页面。所有模板/页面都位于 woocommerce/templates 文件夹中。

您可以在此处找到文档。

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

【讨论】:

  • 是的,我知道我的问题有误,我在 content-single-product.php 中编写了自定义模板,而不是在 page.php 中
【解决方案3】:

编辑 woocommerce/templates/content-single-product.php 以获得单一产品视图

【讨论】:

  • 这就是我所做的,并且有效,我选择的特定类别的产品具有不同的模板。问题是我想在 wordpress 页面上显示这些产品。但是当我使用 woocommerce produc_page 短代码这样做时,令人惊讶的是(这让我感到惊讶),它并没有使用我的自定义模板显示产品。换句话说:example.com/product/myproduct 使用我的自定义模板(位于 content-single-product.php 中)显示产品,但是当我尝试使用 woocommerce 短代码在另一个 wordpress 页面上显示产品时,它不起作用。跨度>
  • 我了解您的问题。在 content-single-product.php 中做一件事,为模板添加 if 条件。例如,如果您想在 XYZ 模板下显示产品的不同样式,则添加。“if (is_page_template('XYZ.php'))”。您可以在其中为该模板编写特定代码。
猜你喜欢
  • 2016-05-07
  • 2017-06-14
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 2020-01-03
  • 2018-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多