Skip to content

Commit afe5890

Browse files
committed
Enhance order meta viewer
1 parent febcd93 commit afe5890

File tree

1 file changed

+91
-1
lines changed

1 file changed

+91
-1
lines changed

includes/class-wc-utils-features.php

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ public function __construct() {
1212
add_filter( 'wc_order_statuses', array( $this, 'register_order_status' ) );
1313
add_action( 'init', array( $this, 'add_order_status' ) );
1414
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' ) );
1517
}
1618

1719
/**
@@ -73,8 +75,96 @@ public function render_order_meta_box( $post ) {
7375
foreach ( $order->get_meta_data() as $meta ) {
7476
$key = esc_html( $meta->key );
7577
$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>';
7794
}
7895
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;
79169
}
80170
}

0 commit comments

Comments
 (0)