【问题标题】:Get sell to specific countries field from API in woocommerce从 woocommerce 中的 API 向特定国家/地区销售
【发布时间】:2021-04-23 19:06:24
【问题描述】:

我正在使用 Next.js 构建一个结帐页面,我想显示我在 WooCommerce 中选择的用户可以选择的国家/地区。 WooCommerce 字段在后端称为“销售到特定国家/地区”,而在标准 Wordpress/WooCommerce 网站的前端,下拉菜单称为“计费国家/地区”。

我查看了 WooCommerce API 文档,但没有看到用于获取此国家/地区列表的端点。存在吗?

【问题讨论】:

  • 结帐$countries_obj = new WC_Countries();
  • 感谢@Mr.Jo,但这不是我可以使用 React 获取国家/地区的 API 端点
  • 好的,我想我明白了。这似乎工作` $woo_countries = new WC_Countries(); $countries = $woo_countries->get_allowed_countries();`
  • 我已经发布了完整的答案,其中包含两种可能的方式来访问脚本中允许的国家/地区。

标签: reactjs woocommerce next.js


【解决方案1】:

如果您想在 JS 文件中获取国家/地区,有两种方法可以不使用官方 WC API 来处理。

方案一(JS方案):

首先,您需要以某种方式将国家/地区传递给您的 JS 文件。您可以使用 WordPress 的本地化功能来做到这一点。为此,请转到添加脚本的文件。您通常使用此函数执行此操作:

wp_register_script( 'my-script', 'path/to/my-script.js' );
wp_enqueue_script( 'my-script' );

现在您可以使用本地化功能来查找脚本并传递您的国家/地区:

$countries = new WC_Countries();

wp_localize_script( 'my-script', 'my_script', [
    'countries' => $countries->get_allowed_countries()
]);

在您的 JS 中,您现在可以使用 console.log( my_script.countries ) 访问这些数据。

解决方案 2(自有端点解决方案):

使用解决方案 2,您可以在 WordPress 中创建自己的端点。如果我是你,我会先在这里阅读这些内容:

https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/

有了这些知识,您现在就可以创建自己的端点了。我不想描述所有内容,因为它很多,我认为你可以做到!

有3个部分需要处理:

  1. 自定义端点注册
  2. 身份验证
  3. 回调

首先您需要注册一个如下所示的自定义端点并创建一个回调函数:

register_rest_route( 'user8463989/v1', 'countries', [
        [
            'methods'             => WP_REST_Server::READABLE,
            'callback'            => 'get_allowed_countries',
            'permission_callback' => '', // <- you can do a permission check here like if the user is allowed and has correct caps
        ]
    ]
);
function get_allowed_countries(): WP_REST_Response {
    $countries = new WC_Countries();
    return new WP_REST_Response( [
        'data'    => $countries->get_allowed_countries()
    ], 200 );
}

现在您可以通过调用此 URL 来使用基本的 JS http 请求来调用您的端点:

https://your-page.com/user8463989/v1/countries

如果一切正确且身份验证有效,您将获得国家/地区列表。

解决方案 1 已经过测试并且可以正常工作 - 解决方案 2 也需要您进行一些工作,因为需要进行身份验证(如果您需要一些)。否则,每个人都可以访问您允许的国家/地区。如果这对你来说没问题,那就去吧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多