为了账号安全,请及时绑定邮箱和手机立即绑定

仅向管理员添加运输方式到 Woocommerce 订单页面

仅向管理员添加运输方式到 Woocommerce 订单页面

PHP
胡说叔叔 2023-04-02 15:05:50
我需要向我们的 WooCommerce编辑订单页面添加一些运输方式。这将仅供管理员内部使用,因此客户应该看不到这些选项。是否有我们可以添加的钩子或自定义代码来填充送货方式下拉列表?不需要额外的功能(无税、费率等)
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

我认为有更多方法可以实现您的目标。这将是一个解决方案:


用户角色的运送方式


您可以使用用户权限解决此问题。只有“管理员”角色的用户才能使用“usps”送货方式。


简单的方法是使用免费插件,例如:


https://wordpress.org/plugins/user-role-editor/


在此插件中,您可以选择您的用户角色并单击“添加功能”,希望能找到您的送货方式。


还有完全适合您的问题的解决方案:


https://wordpress.org/plugins/user-role-based-shipping-method/ 还有很多插件不是免费的,但可能会提供更多的便利和支持。


更难的方法是编写一个函数并使用 woocommerce 和 wordpress 钩子和过滤器。这有点复杂,但我会给你一些开始的东西。


在 wordpress 中,用户角色是一组能力。


您可以像这样在 wordpress 中获取角色对象:


$administrator_role = get_role( 'administrator' );

您可以添加功能并删除它们:


$administrator_role->add_cap( 'custom_capability' );

$administrator_role->remove_cap( 'custom_capability' );

在此处阅读相关内容:https ://developer.wordpress.org/plugins/users/roles-and-capabilities/


幸运的是,有一个 woocommerce 过滤器可供使用。 也许你应该先看看这个,这可能会完全解决你的问题:


https://docs.woocommerce.com/document/hide-other-shipping-methods-when-free-shipping-is-available/


如您所见,您想要的过滤器是:


add_filter('woocommerce_package_rates', 'your_function', 30, 2);

http://hookr.io/filters/woocommerce_package_rates/


这是一个教程,如何使用它:


https://trackitweb.com/woocommerce-hide-a-shipping-method-based-on-user-role/


示例中的送货方式称为“本地取件”:


add_filter('woocommerce_package_rates', 'hide_local_pickup_based_on_user_role', 30, 2);


function hide_local_pickup_based_on_user_role($rates, $package) {

  foreach($rates as $rate_key => $rate){

    if($rate->method_id === 'local_pickup'){

      if(!current_user_can('local_pickup_allowed') || !is_user_logged_in()){

        unset($rates[$rate_key]);

        break;

      }

    }

  }

  return $rates;

这是您检查角色能力(和登录)的部分,用于为没有此能力的用户取消运输方式:


if(!current_user_can('local_pickup_allowed') || !is_user_logged_in()){ ... }

我希望这可以帮助你!


查看完整回答
反对 回复 2023-04-02
  • 1 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信