如何在插件(如WooCommerce的Shop页面)中包含主题模板文件?

时间:2018-01-25 作者:rob_c

我正在尝试定制WooCommerce的商店页面(在本例中称为“产品”),以包含来自我的WordPress主主题的模板部分。

get_template_part() 不起作用。我相信这是因为插件无法判断主题中会存在哪些文件,所以它被禁用了。或者,我想知道这是否是因为函数是从插件目录中调用的,所以它在错误的目录中查找。

include() 不起作用。我发现以下错误:

Warning: include(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in ...\\woocommerce\\archive-product.php on line 52
Warning: include(.../partials/acf-flexible-layout.php): failed to open stream: no suitable wrapper could be found in ...\\woocommerce\\archive-product.php on line 52
Warning: include(): Failed opening \'.../partials/acf-flexible-layout.php\' for inclusion (include_path=\'.;C:\\php\\pear\') in ...\\woocommerce\\archive-product.php on line 52
注:三个点(…)在文件路径中是对我的主题的引用。

另外需要注意的是,我试图在模板部分包括与WordPress中的产品/商店页面相关联的引用高级自定义字段。

copying the template part\'s code directly into the archive-product.php 不起作用。我不知道为什么会这样。

任何帮助都将不胜感激。

<小时>EDIT我已经查过了How to include a file using get_template_part() in a plugin? 但这似乎并不合适:

所选答案给出include() 作为解决方案。我已经说过这对我不起作用I\'m 正在开发。这是WooCommerce。插件的任何更新都可能删除我添加/更改的文件the other promising answer 所以我无法调整它以满足我的需要(如果可能的话)

1 个回复
SO网友:rob_c

我有一个解决方案,至少在我的具体案例中是这样的。

<小时>

Solution

get_template_part() 最后确实有用,但ACF需要帖子的ID(商店页面)。从循环外部调用ACF字段时,需要指定一个post ID。

对于使用模板的站点上的所有其他页面,它已经知道ID,所以我不必指定。从表面上看,我是从归档产品中调用它的。php在循环之外。如果有人能澄清这一点,可能会有所帮助。

所以,在归档产品中。php:

<?php get_template_part( \'partials/acf\', \'a-template-file\' ); ?>
然后在模板文件中:

$post_id = \'\';
if ( is_shop() ) {
    $post_id = 20;  // 20 being the ID of my Shop page
} else {
    $post_id = get_the_ID();
}

if ( have_rows(\'flexible_content_layout\', $post_id) ) {

    while ( have_rows(\'flexible_content_layout\', $post_id) ) {

        the_row();

        // etc, etc...

结束

相关推荐

Virtual Pages plugins

我很难让插件正常工作Virtual Pages (WordPress插件可简化虚拟页面的创建)我确实进行了编辑,根据查询创建了一个循环。add_action( \'gm_virtual_pages\', function( $controller ) { /* Creating virtuals pages for companies */ $args = array( \'post_type\' => array(\'companies\',), \'post_status\'

如何在插件(如WooCommerce的Shop页面)中包含主题模板文件? - 小码农CODE - 行之有效找到问题解决它

如何在插件(如WooCommerce的Shop页面)中包含主题模板文件?

时间:2018-01-25 作者:rob_c

我正在尝试定制WooCommerce的商店页面(在本例中称为“产品”),以包含来自我的WordPress主主题的模板部分。

get_template_part() 不起作用。我相信这是因为插件无法判断主题中会存在哪些文件,所以它被禁用了。或者,我想知道这是否是因为函数是从插件目录中调用的,所以它在错误的目录中查找。

include() 不起作用。我发现以下错误:

Warning: include(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in ...\\woocommerce\\archive-product.php on line 52
Warning: include(.../partials/acf-flexible-layout.php): failed to open stream: no suitable wrapper could be found in ...\\woocommerce\\archive-product.php on line 52
Warning: include(): Failed opening \'.../partials/acf-flexible-layout.php\' for inclusion (include_path=\'.;C:\\php\\pear\') in ...\\woocommerce\\archive-product.php on line 52
注:三个点(…)在文件路径中是对我的主题的引用。

另外需要注意的是,我试图在模板部分包括与WordPress中的产品/商店页面相关联的引用高级自定义字段。

copying the template part\'s code directly into the archive-product.php 不起作用。我不知道为什么会这样。

任何帮助都将不胜感激。

<小时>EDIT我已经查过了How to include a file using get_template_part() in a plugin? 但这似乎并不合适:

所选答案给出include() 作为解决方案。我已经说过这对我不起作用I\'m 正在开发。这是WooCommerce。插件的任何更新都可能删除我添加/更改的文件the other promising answer 所以我无法调整它以满足我的需要(如果可能的话)

1 个回复
SO网友:rob_c

我有一个解决方案,至少在我的具体案例中是这样的。

<小时>

Solution

get_template_part() 最后确实有用,但ACF需要帖子的ID(商店页面)。从循环外部调用ACF字段时,需要指定一个post ID。

对于使用模板的站点上的所有其他页面,它已经知道ID,所以我不必指定。从表面上看,我是从归档产品中调用它的。php在循环之外。如果有人能澄清这一点,可能会有所帮助。

所以,在归档产品中。php:

<?php get_template_part( \'partials/acf\', \'a-template-file\' ); ?>
然后在模板文件中:

$post_id = \'\';
if ( is_shop() ) {
    $post_id = 20;  // 20 being the ID of my Shop page
} else {
    $post_id = get_the_ID();
}

if ( have_rows(\'flexible_content_layout\', $post_id) ) {

    while ( have_rows(\'flexible_content_layout\', $post_id) ) {

        the_row();

        // etc, etc...

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。