如何开发一个woocommerce插件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何开发一个woocommerce插件相关的知识,希望对你有一定的参考价值。

参考技术A

官方手册中已经很详细的说明了开发WooCommerce插件的步骤和方法;

因为阅读英文手册可能比较慢,所以对英文手册做了简体中文翻译,希望对你有帮助:

为WooCommerce创建一个插件

参考技术B 你好,woocommerce本身的前后台就有简体中文语言包啊,也就是说,你不用汉化啊,如果你在你的网站上看到了前台英文,很可能是你的主题中集成的woocommerce文件中有英文。

WooCommerce 插件模板覆盖

【中文标题】WooCommerce 插件模板覆盖【英文标题】:WooCommerce plugin template overriding 【发布时间】:2013-02-26 00:57:58 【问题描述】:

我正在开发一个 WooCommerce 插件(实际上是常用的 WP 插件,但仅在启用 WooCommerce 时才有效),它应该改变标准的 WooCommerce 输出逻辑。特别是我需要自己覆盖标准的 archive-product.php 模板。 我发现在主题中更改模板没有问题,但在插件中无法做到这一点。我如何对 WP 和 WooCommerce 核心进行任何更改的情况下做到这一点?

【问题讨论】:

【参考方案1】:

我认为您需要通过 WooCommerce 可用的钩子(过滤器和操作)来做到这一点。

这是一个列表: http://docs.woothemes.com/document/hooks/#templatehooks

这是开始使用钩子的地方: http://wp.tutsplus.com/tutorials/the-beginners-guide-to-wordpress-actions-and-filters/

【讨论】:

【参考方案2】:

这是我尝试这样的事情。希望它会有所帮助。

将此过滤器添加到您的插件中:

add_filter( 'template_include', 'my_include_template_function' );

然后回调函数会是

function my_include_template_function( $template_path ) 

            if ( is_single() && get_post_type() == 'product' ) 

                // checks if the file exists in the theme first,
                // otherwise serve the file from the plugin
                if ( $theme_file = locate_template( array ( 'single-product.php' ) ) ) 
                    $template_path = $theme_file;
                 else 
                    $template_path = PLUGIN_TEMPLATE_PATH . 'single-product.php';
                

             elseif ( is_product_taxonomy() ) 

                if ( is_tax( 'product_cat' ) ) 

                    // checks if the file exists in the theme first,
                    // otherwise serve the file from the plugin
                    if ( $theme_file = locate_template( array ( 'taxonomy-product_cat.php' ) ) ) 
                        $template_path = $theme_file;
                     else 
                        $template_path = PLUGIN_TEMPLATE_PATH . 'taxonomy-product_cat.php';
                    

                 else 

                    // checks if the file exists in the theme first,
                    // otherwise serve the file from the plugin
                    if ( $theme_file = locate_template( array ( 'archive-product.php' ) ) ) 
                        $template_path = $theme_file;
                     else 
                        $template_path = PLUGIN_TEMPLATE_PATH . 'archive-product.php';
                    
                

             elseif ( is_archive() && get_post_type() == 'product' ) 

                // checks if the file exists in the theme first,
                // otherwise serve the file from the plugin
                if ( $theme_file = locate_template( array ( 'archive-product.php' ) ) ) 
                    $template_path = $theme_file;
                 else 
                    $template_path = PLUGIN_TEMPLATE_PATH . 'archive-product.php';
                

            

        return $template_path;
    

我检查这个主题是否首次加载。如果在主题中找不到该文件,则将从插件加载。

您可以在此处更改逻辑。

希望它能完成你的工作。

谢谢

【讨论】:

以上是关于如何开发一个woocommerce插件的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义挂钩添加到 Woocommerce 的自定义插件

WooCommerce 插件模板覆盖

根据 WooCommerce 中的自定义结帐单选按钮和文本字段设置动态费用

php [WooCommerce插件开发人员手册]记录可用于调试目的的WooCommerce数据。

php [WooCommerce插件开发人员手册]记录可用于调试目的的WooCommerce数据。

Woocommerce Order Delivery 插件更改显示位置