diff --git a/plugins/woocommerce/changelog/fix-44029 b/plugins/woocommerce/changelog/fix-44029 new file mode 100644 index 0000000000000..ec3c34c156530 --- /dev/null +++ b/plugins/woocommerce/changelog/fix-44029 @@ -0,0 +1,4 @@ +Significance: patch +Type: add + +Add used meta keys dropdown in HPOS custom fields metabox. diff --git a/plugins/woocommerce/client/legacy/css/admin.scss b/plugins/woocommerce/client/legacy/css/admin.scss index d13df5a096f6d..15e7f99f5faaa 100644 --- a/plugins/woocommerce/client/legacy/css/admin.scss +++ b/plugins/woocommerce/client/legacy/css/admin.scss @@ -2786,6 +2786,17 @@ ul.wc_coupon_list_block { } } +#order_custom #postcustomstuff { + .add-custom-field { + padding: 12px 8px 8px; + } + + .submit { + border: 0 none; + float: none; + } +} + #side-sortables #woocommerce-order-downloads { .buttons, .select2-container { diff --git a/plugins/woocommerce/src/Internal/Admin/Orders/MetaBoxes/CustomMetaBox.php b/plugins/woocommerce/src/Internal/Admin/Orders/MetaBoxes/CustomMetaBox.php index dd44808ca72ee..66bb48b1f1a66 100644 --- a/plugins/woocommerce/src/Internal/Admin/Orders/MetaBoxes/CustomMetaBox.php +++ b/plugins/woocommerce/src/Internal/Admin/Orders/MetaBoxes/CustomMetaBox.php @@ -5,8 +5,8 @@ namespace Automattic\WooCommerce\Internal\Admin\Orders\MetaBoxes; -use WC_Data_Store; -use WC_Meta_Data; +use Automattic\WooCommerce\Internal\DataStores\CustomMetaDataStore; +use Automattic\WooCommerce\Internal\DataStores\Orders\OrdersTableDataStoreMeta; use WC_Order; use WP_Ajax_Response; @@ -92,16 +92,44 @@ private function render_custom_meta_form( array $metadata_to_list, \WC_Order $or * Compute keys to display in autofill when adding new meta key entry in custom meta box. * Currently, returns empty keys, will be implemented after caching is merged. * - * @param array|null $keys Keys to display in autofill. - * @param \WP_Post|\WC_Order $order Order object. + * @param mixed $deprecated Unused argument. For backwards compatibility. + * @param \WP_Post|\WC_Order $order Order object. * - * @return array|mixed Array of keys to display in autofill. + * @return array Array of keys to display in autofill. */ - public function order_meta_keys_autofill( $keys, $order ) { - if ( is_a( $order, \WC_Order::class ) ) { + public function order_meta_keys_autofill( $deprecated, $order ) { + if ( ! is_a( $order, \WC_Order::class ) ) { return array(); } + /** + * Filters values for the meta key dropdown in the Custom Fields meta box. + * + * Compatibility filter for `postmeta_form_keys` filter. + * + * @since 6.9.0 + * + * @param array|null $keys Pre-defined meta keys to be used in place of a postmeta query. Default null. + * @param \WC_Order $order The current post object. + */ + $keys = apply_filters( 'postmeta_form_keys', null, $order ); + if ( null === $keys || ! is_array( $keys ) ) { + /** + * Compatibility filter for 'postmeta_form_limit', which filters the number of custom fields to retrieve + * for the drop-down in the Custom Fields meta box. + * + * @since 8.8.0 + * + * @param int $limit Number of custom fields to retrieve. Default 30. + */ + $limit = apply_filters( 'postmeta_form_limit', 30 ); + $keys = wc_get_container()->get( OrdersTableDataStoreMeta::class )->get_meta_keys( $limit ); + } + + if ( $keys ) { + natcasesort( $keys ); + } + return $keys; } @@ -116,17 +144,6 @@ public function render_meta_form( \WC_Order $order ) : void { $meta_key_input_id = 'metakeyselect'; $keys = $this->order_meta_keys_autofill( null, $order ); - /** - * Filters values for the meta key dropdown in the Custom Fields meta box. - * - * Compatibility filter for `postmeta_form_keys` filter. - * - * @since 6.9.0 - * - * @param array|null $keys Pre-defined meta keys to be used in place of a postmeta query. Default null. - * @param \WC_Order $order The current post object. - */ - $keys = apply_filters( 'postmeta_form_keys', $keys, $order ); ?>