我的目标是允许特定角色查看商店中的任何订单。虽然在“我的帐户”页面中显示所有订单相对容易,但访问不同用户创建的特定订单总是以“无效订单。我的帐户”错误结束。
到目前为止,我已经在woocommerce\u my\u account\u my\u orders\u query
filter中添加了自定义查询,这样就可以查看具有相同角色的帐户所做的所有订单。我将角色权限设置为完全权限(根据此链接,权限与店铺经理和管理员相同,但默认情况下这些角色也无法查看所有订单:https://github.com/woocommerce/woocommerce/blob/ee01d4219282387c2975ef4594677453c1dd7a0e/includes/class-wc-install.php#L1052
我正在考虑创建自定义视图顺序。php
模板,但是我宁愿使用wc\u get\u order()
一次获取整个order对象。有人遇到过这样的挑战吗?
下面是我如何添加新角色的:
function lf_wc_role_custom() {
add_role(
'custom_role',
'Custom Role',
[
'level_9' => true,
'level_8' => true,
'level_7' => true,
'level_6' => true,
'level_5' => true,
'level_4' => true,
'level_3' => true,
'level_2' => true,
'level_1' => true,
'level_0' => true,
'read' => true,
'read_private_pages' => true,
'read_private_posts' => true,
'edit_posts' => true,
'edit_pages' => true,
'edit_published_posts' => true,
'edit_published_pages' => true,
'edit_private_pages' => true,
'edit_private_posts' => true,
'edit_others_posts' => true,
'edit_others_pages' => true,
'publish_posts' => true,
'publish_pages' => true,
'delete_posts' => true,
'delete_pages' => true,
'delete_private_pages' => true,
'delete_private_posts' => true,
'delete_published_pages' => true,
'delete_published_posts' => true,
'delete_others_posts' => true,
'delete_others_pages' => true,
'manage_categories' => true,
'manage_links' => true,
'moderate_comments' => true,
'upload_files' => true,
'export' => true,
'import' => true,
'list_users' => true,
'edit_theme_options' => true,
]
);
}
add_action('admin_init', 'lf_wc_role_custom');
到目前为止,我是如何修改订单查询的:
function lf_modify_my_order_query( $query ) {
global $wpdb;
$current_user_id = get_current_user_id();
$user = wp_get_current_user();
$allowed_roles = ['administrator', 'custom_role'];
if ( array_intersect( $allowed_roles, $user->roles ) ) {
$args = array(
'role' => $user->roles[0],
);
$all_users_with_role = get_users( $args );
$user_ids = [];
foreach ($all_users_with_role as $user_with_role) {
array_push($user_ids, $user_with_role->data->ID);
}
$user_ids_query = implode("', '", $user_ids);
$prepare_query = $wpdb->prepare(
"SELECT post_id
FROM {$wpdb->postmeta}
WHERE
meta_key LIKE %s
AND meta_value IN ('$user_ids_query');",
'_customer_user',
$user_ids
);
$results = $wpdb->get_results( $prepare_query, ARRAY_A );
$main_post_ids = wp_list_pluck( $results, 'post_id' );
unset( $query['customer'] );
$query['post__in'] = $main_post_ids;
}
return $query;
}
add_filter( 'woocommerce_my_account_my_orders_query', 'lf_modify_my_order_query', 20, 1 );```
好吧,我是这样解决的。我最终创建了一个view-order.php
模板的副本,我将为属于特定角色的用户提供服务。在我的子主题目录中,我创建了伍德商业/我的帐户/view-my-order.php
文件,其中包含以下内容:
$user = wp_get_current_user();
$allowed_roles = ['custom_role'];
if ( array_intersect( $allowed_roles, $user->roles ) ) {
$order = wc_get_order($order_id);
$customer_id = $order->customer_id;
$customer_meta = get_userdata($customer_id);
$customer_roles = $customer_meta->roles;
if (!array_intersect($allowed_roles, $customer_roles)) {
echo 'You do not have permission to view this order.';
die();
}
}
else {
die();
}
以上是为了确保登录用户只能在客户具有相同角色时查看订单。
然后在函数中。php
我提出了以下内容:
// Creates new query var so we can access new page
function lf_custom_query_vars( $vars ) {
$vars['view-my-order'] = 'view-my-order';
return $vars;
}
add_filter( 'woocommerce_get_query_vars', 'lf_custom_query_vars', 0 );
// Flushes rewrite rules (required with custom WC pages?)
function lf_custom_flush_rewrite_rules() {
flush_rewrite_rules();
}
add_action( 'wp_loaded', 'lf_custom_flush_rewrite_rules' );
// Replaces native "View" button button next to each order on the list
add_filter('woocommerce_my_account_my_orders_actions', function($actions, $order) {
$user = wp_get_current_user();
$allowed_roles = ['custom_role'];
if ( array_intersect( $allowed_roles, $user->roles ) ) {
$actions['view'] = [
'url' => wc_get_endpoint_url( 'view-my-order', $order->get_id() ),
'name' => __( 'View', 'txtdomain' )
];
}
return $actions;
}, 10, 2);
// Renders new template
function lf_view_my_order_endpoint_content() {
$order_id = get_query_var('view-my-order');
wc_get_template('myaccount/view-my-order.php', [
'order_id' => $order_id,
]);
}
add_action( 'woocommerce_account_view-my-order_endpoint', 'lf_view_my_order_endpoint_content' );
这一切都可以进一步优化,但你得到的想法。
问题内容: 我看到以下错误: 使用此代码: 是什么原因引起的,如何解决? 问题答案: 在当前域之外发出ajax请求时,Javascript是受限制的。 例1:您的域名为example.com,并且您想向test.com提出请求=>您不能。 例2:您的域名是example.com,并且您想向inner.example.com发送请求,但是您不能。 例3:您的域名为example.com:80,并且您
在WooCommerce中,当订单处于处理状态时,我希望在“我的帐户”页面上显示一个操作按钮,允许客户通过更改订单状态以完成来确认订单已经到达。 我已经看到允许客户通过电子邮件相关的问题代码改变订单的状态(没有答案),这并没有真正帮助实现我的目标。 客户是否可以通过将订单状态更改为“已完成”来确认订单是否已到达?
我正在使用Microsoft扩展访问Azure DevOps中的密钥库,从密钥库中获取秘密。我得到了这个错误消息,它似乎说我需要允许Azure Devops代理访问KeyVault的权限。“无法获取托管服务主体的访问令牌。请为虚拟机”https://aka.ms/azure-MSI-docs“配置托管服务标识(MSI)。状态代码:400,状态消息:错误请求” 我在一个单独的测试订阅中运行这个功能,
我已创建IAM策略并分配给IAM用户。 请查找保险单 我未选中s3 bucket testingbucket00的“阻止新公共bucket策略”。 我尝试登录aws控制台使用IAM用户列出所有桶,但显示"访问为错误"。 我想给IAM用户分配一个桶,请帮忙。
我正在从主机(http://abc.com.au)向主机http://localhost:8081上运行的Spring Cloud API网关发送ajax请求。 jquery AJAX请求代码。 SimplifiedAdoptionBulkUpload.jsp spring cloud gateway cors配置。 我在chrome控制台中遇到以下错误。 SimplifiedAdoptionBu
本文向大家介绍linux允许端口远程访问开放端口的方法,包括了linux允许端口远程访问开放端口的方法的使用技巧和注意事项,需要的朋友参考一下 1.修改防火墙配置文件 wq保存退出,重启防火墙 这样6379端口就可以远程访问了 2.linux命令开放端口 添加一个开放端口如80端口 保存设置 重启服务即可生效 查看开放端口是否生效 输出以下内容80端口已开放 以上这篇linux允许端口远程访问开放