如何扩展 woocommerce api 端点?

2024-01-11

我正在尝试扩展 woocommerce api 中的客户端点,以包含我在 Functions.php 中创建的一些自定义字段。 但我不明白该怎么做。

我已经复制了class-wc-rest-customers-controller.php从 woocommerce 插件 (woocommerce/includes/api/) 到我的主题中的 woocommerce 文件夹,就像您想要编辑 woocommerce 文件时应该做的那样。

这就是我的 class-wc-rest-customers-controller.php 的样子:https://www.pastebucket.com/561405 https://www.pastebucket.com/561405

我现在的计划是编辑该文件的副本以包含我在functions.php 中添加的custom_fields。但这部分我无法解决。

这是我的functions.php 中的代码,我添加了自定义字段:https://www.pastebucket.com/561406 https://www.pastebucket.com/561406

感觉就像是在 class-wc-rest-customers-controller.php 中第 475 行的函数中,但我不确定。 所以我想知道应该在哪里以及如何添加自定义字段class-wc-rest-customers-controller.php或者我对此全错了?


该文件仅覆盖适用于模板的 AFAIK。在本例中,您尝试重写一个不同的类。

正如您所写,直接对 WooCommerce 目录中的文件进行更改并不是一个好主意。事实上,我根本不建议更改本机端点,除非通过操作和过滤器。

更改 WC REST API 端点行为的一种好的、可重用且面向未来的方法是创建您自己的端点,该端点只需extendsWoocommerce 控制器类,并重写需要自定义的方法。最好不要重写整个方法,而是在自定义方法中包含对父方法的调用。

示例解决方案:(还没有测试过这个特定的解决方案,但最近做了一个非常相似的解决方案)

wp-content/plugins/
    woocommerce/
    your-plugin/
         includes/
             class-your-plugin.php
         your-plugin.php

your-plugin.php

<?php
defined( 'ABSPATH' ) || exit;

add_action('rest_api_init', function(){
    require_once __DIR__ . '/includes/class-your-plugin.php';
    $controller = new Your_Custom_Class();
    $controller->register_routes();
} );

includes/class-your-plugin.php

<?php

defined( 'ABSPATH' ) || exit;

/**
 * Class Your_Custom_Class
 */
class Your_Custom_Class extends WC_REST_Customers_Controller {

/**
 * Endpoint namespace.
 * Use the wc- prefix to make use of WooCommerce authentication for third-parties.
 * @see /wp-content/plugins/woocommerce/includes/api/class-wc-rest-authentication.php:63
 *
 * @var string
 */
protected $namespace = 'wc-your-route/v1';

public function register_routes() {
    register_rest_route(
        $this->namespace,
        '/' . $this->rest_base . '/your-custom-route',
        array(
            array(
                'methods'             => WP_REST_Server::EDITABLE,
                'callback'            => array( $this, 'your_customized_function' ),
                'permission_callback' => array( $this, 'get_items_permissions_check' ),
                'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
            ),
            'schema' => array( $this, 'get_item_schema' ),
        )
    );
}

/**
 * Your custom function
 */
protected function your_customized_function( $arg1, $arg2) {
    /*******************************
    // IMPLEMENT CUSTOM CODE HERE
    *******************************/

    parent::the_name_of_the_original_function( $arg1, $arg2 );

    /*******************************
    // IMPLEMENT CUSTOM CODE HERE
    *******************************/
}

通过这种方式,您可以根据自己的需要自由扩展 API,利用 WC API 当前和未来的所有功能,并保留本机 API...好吧...本机。

虽然这应该是一个干净且“正确”的解决方案,但如果没有对 PHP 类和继承的深入理解以及良好的 IDE 的使用,我不建议走这条路。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何扩展 woocommerce api 端点? 的相关文章

  • php,统计字符并删除超过140个字符的内容

    我需要一个 PHP 函数来计算短语的字符数 如果短语长度超过 140 个字符 则此函数应删除所有其他字符并在短语末尾添加三个点 例如我们有 message I am what I am and you are what you are et
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主
  • 简单的 PHP 表单:电子邮件附件(代码 Golf)

    想象一下 一个用户想要在其网站上放置一个表单 该表单将允许网站访问者上传一个文件和一条简单的消息 该消息将立即通过电子邮件发送 即 该文件未存储在服务器上 或者如果该文件存储在服务器上 仅暂时 作为文件附件 并在邮件正文中添加注释 查看更多
  • 如何使用 PHPExcel 库从 Excel 获取日期

    我正在尝试使用 PHPExcel 从 Excel 获取日期 但我没有得到日期 我得到的字符串值不是 1970 以来的秒数 我尝试过的代码是 InvDate trim excel gt getActiveSheet gt getCell B
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser
  • 使用 PHP 删除文件 onclick [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想在用户单击删除链接时删除文件 但
  • 根据用户角色将帖子状态更改为待处理

    我有会员网站 用户必须付费才能订阅 当用户订阅时 他的角色变为 成员 现在可以发布到名为 用户配置文件 的自定义帖子类型 我想要做的是将所有已发布帖子的状态更改为该帖子类型中的待处理 例如 如果用户角色更改为 已过期 我尝试了这个 但似乎没
  • “空合并”(??) 运算符的用途是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 随着新的 PHP 版本 PHP 7 的发布 引入了新功能 这些新功能中有一个我不熟悉的操作符 这Nul
  • 基于mysql表中唯一电子邮件地址的唯一代码?

    我有一个 mysql 表 它将存储用户电子邮件地址 每个地址都是唯一的 并且是主字段 和时间戳 我添加了另一列名为 unique code varchar 64 utf8 unicode ci 我非常感谢您提供的帮助 a 生成5位字母数字代
  • VB 脚本 Documents.Open 抛出 424 错误

    所以我有一个vbs脚本 Function test2open sSourceFile sPDFFile Dim wApp As Word Application Dim wDoc As Word Document logStream wri
  • 在 PHP 应用程序中实现插件的设计模式

    对于如何在 PHP 应用程序中实现插件有共识吗 我已经调查过观察者模式 http devzone zend com 1732 implementing the observer pattern with splobserver and sp
  • PHP表单提交后如何显示成功消息?

    这是代码 我想要这样 表单提交 gt page2 php gt 重定向 gt page1 php 这是消息 弹出窗口或其他内容 page1 php
  • 如何在wordpress中提交表单

    我正在使用 WordPress 3 3 1twentyten theme 我创建了一个插件来创建自定义表单 我已经在 WordPress 中成功安装了这个 我的插件文件代码如下
  • 将 Javascript 变量转换为 PHP 变量

    我想使用由 videoel getCurrentTime 函数返回给我的 javascript 变量 并将其转换为 php 变量 以便我能够将其添加到我的 SQL 插入查询中 例如 INSERT INTO tblData VALUES ph
  • PHP 继承以及静态方法和属性

    PHP 中的静态属性和方法不能被继承吗 一些例子会有所帮助 不 那不是真的 静态方法和属性 http www php net manual en language oop5 static php将会得到遗传 http www php net
  • CodeIgniter 路由问题以访问前端和后端文件夹

    我正在使用 CodeIgniter 我在控制器和视图中有前端和后端文件夹 我尝试了服务器步骤甚至检查了几乎所有解决方案 但我仍然无法访问它我的默认控制器 路线 php route default controller frontend Us
  • vagrant box速度慢,如何改进?

    我们已经为我们的开发盒构建了一个 vagrant box 但我们面临着一些延迟问题 Issues Assetic 手表速度很慢 app dev php 中的整体应用程序访问速度很慢 在 vagrant box 的共享文件夹中使用 查找 命令
  • 是否可以从插件扩展 Wordpress XMLRPC 接口?

    是否可以创建一个插件 在激活时向 XMLRPC 接口添加新的 功能 并处理其调用 简而言之 是的 您可以将函数添加为插件或添加到主题的functions php 文件中来处理XMLRPC 调用 您将需要以下部分 function xml a
  • “完整性约束违规:1062 重复条目” - 但没有重复行

    我正在将应用程序从本机 mysqli 调用转换为 PDO 尝试将行插入具有外键约束的表时遇到错误 Note 这是一个简化的测试用例 不应复制 粘贴到生产环境中 InfoPHP 5 3 MySQL 5 4 首先 这是表格 CREATE TAB
  • 在网络托管上发布后,php 会话无法正常工作

    我的网站在本地主机上运行良好 但是一旦我将其部署到我的托管服务 会话就会停止工作

随机推荐