WooCommerce是世界上最受欢迎的电子商务平台。 一方面是因为它基于世界上最受欢迎的内容管理系统(WordPress),另一方面是因为它是免费的。
但这也是因为WooCommerce与WordPress本身一样非常灵活。 如果在站点上安装WooCommerce,不仅可以使用它来快速设置和运行在线商店,还可以对其进行自定义,使其完全按照所需的方式运行。
WooCommerce之所以如此灵活是因为其API。 它具有各种动作和筛选器挂钩,函数和类,可用于修改商店的工作方式并创建自定义商店,该商店的工作方式与标准的现成WooCommerce商店非常不同。
在这篇文章中,我将向您介绍该API。 我将向您概述WooCommerce的结构方式,并概述允许您自定义商店的类,挂钩和函数。
我可能无法详细介绍WooCommerce API的各个方面,如果需要的话,我建议使用WooCommerce文档。但是,我可以为您提供所需的信息,以了解可能的方法和入门指南。
因此,让我们开始看看WooCommerce插件的结构。
WooCommerce插件的结构
WooCommerce是一个大插件。 总而言之,它在数十个文件夹中有数百个文件。 所有这些可能会使事情有些令人生畏,但好消息是它实际上并不难理解或修改。 由于WooCommerce的结构清晰且逻辑合理,并且在整个代码中都有注释,因此无需花费太多精力即可确定正在发生的事情。
在为客户自定义WooCommerce网站时,我常常最终会深入研究WooCommerce插件源代码。
在顶层,有四个文件和五个文件夹。
这些文件从其名称开始是不言自明的,并且是许多插件的标准配置: license.txt , readme.txt , uninstall.php和woocommerce.php 。 这些文件中的最后一个是最重要的: woocommerce.php是驱动插件并直接或间接调用这些文件夹中所有其他文件的文件。
除了这些文件之外,还有用于存放不同类型文件的文件夹:
- 资产 ,其中包含CSS,字体,图像和脚本的子文件夹。
- i18n ,其中包括国际化文件。
- sample-data ,默认情况下为空,但可用于虚拟数据。
- include ,其中包括使WooCommerce工作的类,函数等。 自定义WooCommerce时将要查看的大多数文件都在此文件夹中。
- template ,其中包括在您的网站上输出内容的模板文件。
我将不详细研究文件夹结构,因为这将花费很长时间。 但是,如果您打算自定义WooCommerce,建议您花一些时间浏览文件,并掌握它们的结构。
警告:如果您打算自定义WooCommerce,则永远不要直接编辑插件本身。 而是编写您自己的插件或向主题添加自定义项。
WooCommerce课程
我将从WooCommerce中的类开始,因为它是一个从主插件文件开始所有内容的类。
这是woocommerce.php文件的内容:
这里的关键是这一条:
if ( ! class_exists( 'WooCommerce' ) ) {
include_once dirname( __FILE__ ) . '/includes/class-woocommerce.php';
}
这将调用WooCommerce
类,并开始在您的站点中运行WooCommerce。
您可以在/ includes文件夹中找到所有类。 出于某种原因,它们不在名为类的子文件夹中(这会使我的组织工作更合乎逻辑),但它们直接位于此文件夹中。 这些文件之一是class-woocommerce.php文件,该文件从该打开文件中调用。
这不是带有类的唯一文件; 您会在同一/ includes文件夹中找到其余的文件。 您还将在WooCommerce文档中找到所有类的指南。
您可以通过在插件或主题中创建自己的类,然后修改或扩展这些类的功能来使用WooCommerce中的类。 这可能是WooCommerce要定制的最复杂的方面,因此您需要熟悉面向对象的编程 。 如果您想做一些简单的事情,您可能会发现使用函数或挂钩足以满足您的需求。
这导致我:
WooCommerce功能
与大多数插件一样,WooCommerce使用许多功能来运行商店。 您可以覆盖其中一些功能,也可以创建自己的替代功能以覆盖或添加至其中,并确保将其附加到WooCommerce中的相关挂钩。
您可以在WooCommerce文档的 WooCommerce中找到功能的详细信息,包括如何触发每个功能的详细信息。 函数本身全部位于/ includes文件夹中的各种函数文件中,这些文件均名为wc-xxx-functions.php ,其中xxx告诉您它们是哪种函数(例如,函数的wc-template- functions.php在模板文件中, wc-cart-functions.php了解与购物车相关的功能 )。
如果要在插件中修改WooCommerce函数,则需要从其附加的动作或过滤器挂钩中取消WooCommerce函数的钩子,然后编写自己的函数来替换它。 因此,让我们假设您想修改wc_setup_loop()
函数,该函数附加在woocommerce_before_shop_loop
挂钩上。 您将编写如下内容:
function tutsplus_remove_wc_setup_loop() {
remove action( ‘woocommerce_before_shop_loop’, ‘wc_setup_loop’ );
}
add_action( ‘init’, ‘tutsplus_remove_wc_setup_loop’ )
这将取消WooCommerce插件的动作。 然后,您将编写自己的wc_setup_loop()
函数的修改版本并按以下方式触发它:
function tutsplus_wc_setup_loop() {
// contents of function here
}
add action( ‘woocommerce_before_shop_loop’, ‘tutsplus_wc_setup_loop’ );
有时,除了现有的WooCommerce功能之外,您还想添加一个功能,在这种情况下,您需要熟悉WooCommerce中的动作和过滤器挂钩。 将您的函数挂钩到相关的挂钩,并确保在现有的挂钩之前或之后使用优先级将其触发。
另外,WooCommerce中的某些功能是可插入的,这意味着您可以通过使用相同的名称编写自己的功能来覆盖它们。 我们很快会谈到。
WooCommerce动作和筛选器挂钩
WooCommerce使用大量的动作和筛选器挂钩来运行其代码,而不是例如直接将功能编码到模板文件中。
这为您提供了更大的灵活性,并且意味着您可以自定义WooCommerce的输出,而不必创建模板文件的重复项。
假设您要修改单个产品页面上的代码输出。 它包含在/ templates文件夹中的content-single-product.php文件中。
此模板文件中的大多数代码都由挂钩组成,并附有函数。 该文件包含注释掉的文本,可准确告诉您哪些函数连接到了哪些挂钩。
这是一个示例: woocommerce_before_single_product_summary
挂钩。 在模板文件中,有注释掉的文本,列出了与此挂钩相关的功能,然后使用do_action()
触发挂钩本身。
然后,如果要修改或覆盖它们,则需要找到与该动作挂钩相关的功能。 您可以在WooCommerce文档中找到这些功能的完整列表 。
您可以在/ includes文件夹内的一系列文件中找到这些功能的代码。 这些功能通常在逻辑上命名的文件中。 因此,例如,上面示例代码中的woocommerce_show_product_images()
函数钩在content-single-product.php文件中的woocommerce_before_single_product_summary
钩子上,位于wc-template-functions.php文件中,该文件包含直接附加到该函数的函数。钩在模板文件中。
如您所见,掌握WooCommerce API可能需要对文件结构进行一些探索,但是一旦您熟悉了它,就会发现该结构非常合理,并且在大多数情况下,查明一段代码的位置很容易。 如果找不到它,只需在WooCommerce文档中搜索它,它将告诉您在哪里可以找到它。
上面提到的woocommerce_show_product_images()
函数是可插入的 ,这意味着您可以在自己的插件或主题中覆盖它。
if ( ! function_exists( 'woocommerce_show_product_images' ) ) {
/**
* Output the product image before the single product summary.
*/
function woocommerce_show_product_images() {
wc_get_template( 'single-product/product-image.php' );
}
}
只需编写另一个具有相同名称的函数。 当WordPress遇到WooCommerce中的可插入功能时,它将检查是否有另一个具有相同名称的功能,并且因为存在,它不会运行该功能的WooCommerce版本:而是运行您的功能。 确保为函数提供完全相同的名称。
WooCommerce模板文件
客户要求我为WooCommerce进行的许多自定义操作都与模板文件的输出有关。 WooCommerce使更改每个模板文件输出的代码变得容易,因此可以添加自己的自定义代码。 这可能是WooCommerce中已经存在的代码的修改版本(如上所述),或者可能是全新的东西。
如果您想从根本上自定义WooCommerce模板文件,则可以在主题中创建该文件的新版本 ,而WordPress将使用该文件而不是插件中的文件。
因此,如果您想覆盖content-single-product.php文件,则可以在主题中创建一个/ woocommerce文件夹,然后在其中创建一个名为content-single-product.php的文件。 如果要覆盖的模板文件在WooCommerce文件结构中位于最下方,则需要在主题中进行镜像。 因此,如果您想覆盖woocommerce / templates / emails / admin-cancelled-order.php文件,则可以在mytheme / woocommerce / emails / admin-cancelled-order.php中创建一个文件。
创建文件的最简单方法是从WooCommerce创建原始文件的副本,然后进行编辑,因此可以确保文件可以正常工作。
或者,如果您只想修改该模板文件中调用的功能之一,则可以创建一个新功能,然后从相关动作挂钩中删除现有功能,如上所述。 或者,如果该功能是可插拔的,则只需编写一个新版本!
编写自己的WooCommerce插件
现在您已经了解了WooCommerce类,挂钩,函数和模板文件以及如何自定义它们,现在该编写自己的WooCommerce插件了。
如果您要做的就是从WooCommerce覆盖模板文件,则无需编写插件:只需将文件添加到主题即可。 但是,如果要添加功能自定义项,则应通过插件进行。
WooCommerce插件开发人员手册提供了有关如何正确执行此操作的指南。 它包含有关检查WooCommerce是否处于活动状态,文本域,文件命名等方面的建议。
在创建插件之前,您应该通读手册中的提示,并确保正确编写插件。
WooCommerce API给您无尽的灵活性
了解WooCommerce API将帮助您自定义WooCommerce商店并创建插件,您可以使用这些插件来增强各种商店的功能,或者其他人可以用来实现此目的。
翻译自: https://code.tutsplus.com/articles/use-the-woocommerce-api-to-customize-your-online-store--cms-33519