gpt4 book ai didi

php - Woocommerce - 通过插件覆盖模板

转载 作者:行者123 更新时间:2023-12-04 02:19:17 24 4
gpt4 key购买 nike

我有一个问题:有没有办法像使用主题一样通过插件覆盖 WooCommerce 的默认模板?
我有这个代码:

Class WoocommerceOverride {

public function woocommerce_locate_template( $template, $template_name, $template_path ) {
$plugin_path = SPSL_PLUGIN_PATH;
global $woocommerce;
$_template = $template;
if ( ! $template_path ) $template_path = $woocommerce->template_url;
$plugin_path .= '/woocommerce/';

// Look within passed path within the theme - this is priority
$template = locate_template(
array(
$template_path . $template_name,
$template_name
)
);

// Modification: Get the template from this plugin, if it exists
if ( ! $template && file_exists( $plugin_path . $template_name ) )
$template = $plugin_path . $template_name;

// Use default template
if ( ! $template )
$template = $_template;

//echo $template."<br>";

// Return what we found
return $template;
}

}
add_filter( 'woocommerce_locate_template', array('WoocommerceOverride', 'woocommerce_locate_template'), 10, 3 );

这段代码的问题在于它只能部分工作。在某些部分它有效,在其他部分它不起作用。例如,我根本无法自定义 archive-product.php。无论我在那里写什么,无论是代码还是纯文本,我都没有得到任何结果。
我将完全相同的模板文件从我的插件文件夹复制到我的主题文件夹中,它可以工作。但是,因为我需要它作为插件,所以我不能走主题路线。

非常感谢。

最佳答案

  • 使用过滤器 wc_get_template_part我们可以覆盖默认的 WooCommerce 模板部分。
  • 使用过滤器 woocommerce_locate_template我们可以覆盖默认的 WooCommerce 模板。

  • 试试下面的示例代码片段。
    <?php
    /**
    * Override default WooCommerce templates and template parts from plugin.
    *
    * E.g.
    * Override template 'woocommerce/loop/result-count.php' with 'my-plugin/woocommerce/loop/result-count.php'.
    * Override template part 'woocommerce/content-product.php' with 'my-plugin/woocommerce/content-product.php'.
    *
    * Note: We used folder name 'woocommerce' in plugin to override all woocommerce templates and template parts.
    * You can change it as per your requirement.
    */
    // Override Template Part's.
    add_filter( 'wc_get_template_part', 'override_woocommerce_template_part', 10, 3 );
    // Override Template's.
    add_filter( 'woocommerce_locate_template', 'override_woocommerce_template', 10, 3 );
    /**
    * Template Part's
    *
    * @param string $template Default template file path.
    * @param string $slug Template file slug.
    * @param string $name Template file name.
    * @return string Return the template part from plugin.
    */
    function override_woocommerce_template_part( $template, $slug, $name ) {
    // UNCOMMENT FOR @DEBUGGING
    // echo '<pre>';
    // echo 'template: ' . $template . '<br/>';
    // echo 'slug: ' . $slug . '<br/>';
    // echo 'name: ' . $name . '<br/>';
    // echo '</pre>';
    // Template directory.
    // E.g. /wp-content/plugins/my-plugin/woocommerce/
    $template_directory = untrailingslashit( plugin_dir_path( __FILE__ ) ) . 'woocommerce/';
    if ( $name ) {
    $path = $template_directory . "{$slug}-{$name}.php";
    } else {
    $path = $template_directory . "{$slug}.php";
    }
    return file_exists( $path ) ? $path : $template;
    }
    /**
    * Template File
    *
    * @param string $template Default template file path.
    * @param string $template_name Template file name.
    * @param string $template_path Template file directory file path.
    * @return string Return the template file from plugin.
    */
    function override_woocommerce_template( $template, $template_name, $template_path ) {
    // UNCOMMENT FOR @DEBUGGING
    // echo '<pre>';
    // echo 'template: ' . $template . '<br/>';
    // echo 'template_name: ' . $template_name . '<br/>';
    // echo 'template_path: ' . $template_path . '<br/>';
    // echo '</pre>';
    // Template directory.
    // E.g. /wp-content/plugins/my-plugin/woocommerce/
    $template_directory = untrailingslashit( plugin_dir_path( __FILE__ ) ) . 'woocommerce/';
    $path = $template_directory . $template_name;
    return file_exists( $path ) ? $path : $template;
    }

    关于php - Woocommerce - 通过插件覆盖模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32150835/

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