1

我有一个 woocommerce 商店页面,它完美地向我展示了所有产品。该页面也在设置中设置为“商店”页面。现在我想要一个名为 Home 的第二个页面,它应该使用与商店页面相同的模板。(基本上是没有分类和一些新闻的第二个商店页面)

home-template.php

<?php /* Template Name: Homepage */ 
    if ( ! defined( 'ABSPATH' ) ) {
        exit; // Exit if accessed directly
    }
    wc_get_template( 'archive-product.php' );
?>

我正在使用来自 woocommerce 的 github 的标准存档产品模板。

我可以看到正在加载的模板,如标题,但某些 woocommerce 函数不返回预期值。woocommerce_before_shop_loop 不返回任何内容,即使它应该显示 orderby 下拉菜单。woocommerce_product_loop() 返回 true,但 wc_get_loop_prop('total') 返回零。

我也尝试将文件重命名为front-page.php,但这没有帮助。主页在阅读设置中设置正确。

我错过了对查询的调用,还是其他原因?预先感谢您的帮助!

4

1 回答 1

1

当 WooCommerce 创建内置商店页面时,它会将创建页面的 id 保存在 wp_options 数据库表中,其中 option_name 为“woocommerce_shop_page_id”。当 WordPress 加载页面时,WooCommerce 检查正在加载的页面的页面 id 是否等于 option_name 'woocommerce_shop_page_id' 的 option_value,然后执行代码以生成商店页面的 HTML。如果您在页面编辑器中查看了商店页面,您会注意到内容是空的。魔术是通过为这个特殊 id 执行的硬编码例程完成的。

由于您的自定义页面具有不同的页面 ID,因此不会执行任何用于生成商店页面的自定义代码。因此,您需要为您的自定义页面执行此魔术代码。可以做到,但您需要对 WooCommerce 有很好的了解。

我建议您重新考虑您的设计,而不是新页面,只需使用操作和过滤器自定义现有的商店页面。

于 2020-02-06T02:18:10.747 回答