@@ -12,6 +12,8 @@ public function __construct() {
12
12
add_filter ( 'wc_order_statuses ' , array ( $ this , 'register_order_status ' ) );
13
13
add_action ( 'init ' , array ( $ this , 'add_order_status ' ) );
14
14
add_action ( 'add_meta_boxes ' , array ( $ this , 'add_order_meta_box ' ) );
15
+ add_action ( 'admin_post_wc_utils_add_meta ' , array ( $ this , 'handle_add_meta ' ) );
16
+ add_action ( 'admin_post_wc_utils_delete_meta ' , array ( $ this , 'handle_delete_meta ' ) );
15
17
}
16
18
17
19
/**
@@ -73,8 +75,96 @@ public function render_order_meta_box( $post ) {
73
75
foreach ( $ order ->get_meta_data () as $ meta ) {
74
76
$ key = esc_html ( $ meta ->key );
75
77
$ value = maybe_serialize ( $ meta ->value );
76
- echo '<tr><th style="width:200px"> ' . $ key . '</th><td> ' . esc_html ( $ value ) . '</td></tr> ' ;
78
+ echo '<tr><th style="width:200px"> ' . $ key . '</th><td> ' . esc_html ( $ value );
79
+ if ( 0 !== strpos ( $ meta ->key , '_ ' ) ) {
80
+ $ delete_url = wp_nonce_url (
81
+ add_query_arg (
82
+ array (
83
+ 'action ' => 'wc_utils_delete_meta ' ,
84
+ 'order_id ' => $ order ->get_id (),
85
+ 'meta_key ' => rawurlencode ( $ meta ->key ),
86
+ ),
87
+ admin_url ( 'admin-post.php ' )
88
+ ),
89
+ 'wc_utils_delete_meta_ ' . $ order ->get_id ()
90
+ );
91
+ echo ' <a href=" ' . esc_url ( $ delete_url ) . '" class="button-link delete-meta"> ' . esc_html__ ( 'Delete ' , 'woocommerce-utils ' ) . '</a> ' ;
92
+ }
93
+ echo '</td></tr> ' ;
77
94
}
78
95
echo '</tbody></table> ' ;
96
+
97
+ echo '<h4> ' . esc_html__ ( 'Add Meta ' , 'woocommerce-utils ' ) . '</h4> ' ;
98
+ echo '<form method="post" action=" ' . esc_url ( admin_url ( 'admin-post.php ' ) ) . '"> ' ;
99
+ wp_nonce_field ( 'wc_utils_add_meta_ ' . $ order ->get_id () );
100
+ echo '<input type="hidden" name="action" value="wc_utils_add_meta" /> ' ;
101
+ echo '<input type="hidden" name="order_id" value=" ' . esc_attr ( $ order ->get_id () ) . '" /> ' ;
102
+ echo '<p><label> ' . esc_html__ ( 'Meta Key ' , 'woocommerce-utils ' ) . '<br /> ' ;
103
+ echo '<input type="text" name="meta_key" /></label></p> ' ;
104
+ echo '<p><label> ' . esc_html__ ( 'Meta Value ' , 'woocommerce-utils ' ) . '<br /> ' ;
105
+ echo '<textarea name="meta_value" rows="2" cols="40"></textarea></label></p> ' ;
106
+ echo '<p><input type="submit" class="button" value=" ' . esc_attr__ ( 'Add Meta ' , 'woocommerce-utils ' ) . '" /></p> ' ;
107
+ echo '</form> ' ;
108
+ }
109
+
110
+ /**
111
+ * Handle adding custom meta data.
112
+ */
113
+ public function handle_add_meta () {
114
+ if ( empty ( $ _POST ['order_id ' ] ) || ! isset ( $ _POST ['meta_key ' ], $ _POST ['meta_value ' ] ) ) {
115
+ wp_safe_redirect ( wp_get_referer () );
116
+ exit ;
117
+ }
118
+
119
+ $ order_id = absint ( $ _POST ['order_id ' ] );
120
+ if ( ! current_user_can ( 'edit_shop_order ' , $ order_id ) ) {
121
+ wp_die ( esc_html__ ( 'Insufficient permissions. ' , 'woocommerce-utils ' ) );
122
+ }
123
+
124
+ check_admin_referer ( 'wc_utils_add_meta_ ' . $ order_id );
125
+
126
+ $ key = sanitize_text_field ( wp_unslash ( $ _POST ['meta_key ' ] ) );
127
+ $ value = wp_unslash ( $ _POST ['meta_value ' ] );
128
+
129
+ if ( '' !== $ key && 0 !== strpos ( $ key , '_ ' ) ) {
130
+ $ order = wc_get_order ( $ order_id );
131
+ if ( $ order ) {
132
+ $ order ->add_meta_data ( $ key , $ value , false );
133
+ $ order ->save ();
134
+ }
135
+ }
136
+
137
+ wp_safe_redirect ( wp_get_referer () );
138
+ exit ;
139
+ }
140
+
141
+ /**
142
+ * Handle deletion of custom meta data.
143
+ */
144
+ public function handle_delete_meta () {
145
+ if ( empty ( $ _GET ['order_id ' ] ) || empty ( $ _GET ['meta_key ' ] ) ) {
146
+ wp_safe_redirect ( wp_get_referer () );
147
+ exit ;
148
+ }
149
+
150
+ $ order_id = absint ( $ _GET ['order_id ' ] );
151
+ if ( ! current_user_can ( 'edit_shop_order ' , $ order_id ) ) {
152
+ wp_die ( esc_html__ ( 'Insufficient permissions. ' , 'woocommerce-utils ' ) );
153
+ }
154
+
155
+ check_admin_referer ( 'wc_utils_delete_meta_ ' . $ order_id );
156
+
157
+ $ meta_key = sanitize_text_field ( wp_unslash ( $ _GET ['meta_key ' ] ) );
158
+
159
+ if ( 0 !== strpos ( $ meta_key , '_ ' ) ) {
160
+ $ order = wc_get_order ( $ order_id );
161
+ if ( $ order ) {
162
+ $ order ->delete_meta_data ( $ meta_key );
163
+ $ order ->save ();
164
+ }
165
+ }
166
+
167
+ wp_safe_redirect ( wp_get_referer () );
168
+ exit ;
79
169
}
80
170
}
0 commit comments