Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress 如果站点使用Divi,如何创建模板?_Wordpress_Wordpress Theming - Fatal编程技术网

Wordpress 如果站点使用Divi,如何创建模板?

Wordpress 如果站点使用Divi,如何创建模板?,wordpress,wordpress-theming,Wordpress,Wordpress Theming,我在一个网站上做一些工作,所有的东西都是用Divi制作的 我只是想为产品页面等构建一些自定义的woocommerce模板。。使用代码,但当我将模板添加到主题文件夹时,它不会覆盖产品页面 当我查看调试查询时,它显示正在使用et页面生成器模板,而不是常规产品模板 他们的文档都是为非编码人员准备的,唯一与代码相关的东西是制作模块 如何从子主题创建普通模板覆盖?您只需确保模板文件的路径正确即可。例如,如果您试图覆盖位于以下位置的单一产品模板: wp-content/plugins/woocommerce

我在一个网站上做一些工作,所有的东西都是用Divi制作的

我只是想为产品页面等构建一些自定义的woocommerce模板。。使用代码,但当我将模板添加到主题文件夹时,它不会覆盖产品页面

当我查看调试查询时,它显示正在使用et页面生成器模板,而不是常规产品模板

他们的文档都是为非编码人员准备的,唯一与代码相关的东西是制作模块


如何从子主题创建普通模板覆盖?

您只需确保模板文件的路径正确即可。例如,如果您试图覆盖位于以下位置的单一产品模板:

wp-content/plugins/woocommerce/templates/single-product.php
只需将其复制到:

wp-content/themes/{your-child-theme}/woocommerce/single-product.php
并在那里进行更改

对于任何模板文件,只需匹配路径减去
templates
文件夹即可

如果安装了缓存插件,则可能需要在显示更改之前清除缓存

为了测试它,我复制了
single product.php
product image.php
,并做了以下更改

你可以在这里看到结果:

如果这对您不起作用,请确保您的子主题设置正确


编辑:Divi的主题生成器一旦激活,将导致网站不再使用页面模板。因此,没有办法(除非重写主题生成器)用您自己的模板文件覆盖它

但是,您可以自定义主题生成器使用的Divi模块,尽管编辑它们有点复杂

这些模块位于:

wp-content/themes/Divi/includes/builder/module/
例如,我将覆盖WooCommerce标题模块

wp-content/themes/Divi/includes/builder/module/woocommerce/Title.php
首先,将该文件复制到子主题中,并将其放置在新文件夹中:

wp-content/themes/Divi-child/custom-modules/Title.php
接下来,添加子主题的
functions.php
的以下代码以替换现有模块:

function divi_child_theme_setup() {
    if ( class_exists('ET_Builder_Module')) {
        get_template_part( 'custom-modules/custom-title' );
        $TE_ct = new Custom_ET_Builder_Module_Woocommerce_Title();
        remove_shortcode( 'et_pb_wc_title' );
        add_shortcode( 'et_pb_wc_title', array($TE_ct, '_shortcode_callback') );
    }
}
add_action('wp', 'divi_child_theme_setup', 9999);
调用您的变量(
$TE\u ct
)和模块(
自定义构建器\u模块\u商业\u标题

最后,在子主题中编辑模块。确保类名与
functions.php
中使用的类名匹配

...
class Custom_ET_Builder_Module_Woocommerce_Title extends ET_Builder_Module {
    /**
     * Initialize.
     */
    public function init() {
        echo "<h1>CUSTOMIZED!!</h1>";
        $this->name       = esc_html__( 'Woo Title', 'et_builder' );
        $this->plural     = esc_html__( 'Woo Titles', 'et_builder' );
        $this->slug       = 'et_pb_wc_title';       
        $this->vb_support = 'on';
...
。。。
类自定义构建器模块标题扩展了构建器模块{
/**
*初始化。
*/
公共函数init(){
回声“定制!!”;
$this->name=esc_html_uuuu('Woo Title','et_builder');
$this->plural=esc_html_uuuu('Woo Titles','et_builder');
$this->slug='et_pb_wc_title';
$this->vb_支持='on';
...
在这里,我添加了一个简单的
echo
,以显示模块正在被覆盖

结果:


如果存在任何themebuilder设置,则无法使用。该网站为网站的其他部分提供了广泛的themebuilder模板,但只有在所有这些模板都存在时,它才会识别该模板deleted@Guerrilla在这种情况下,您将无法使用自定义模板,但可以自定义主题生成器使用的Divi模块回答细节问题。