class-order-search-manager.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. // Extends order search functionality.
  3. class Order_Search_Manager {
  4. public function __construct() {
  5. add_filter('manage_woocommerce_page_wc-orders_columns', array($this, 'add_external_ref_ord_no_to_search'));
  6. add_action('manage_woocommerce_page_wc-orders_custom_column', array($this, 'add_external_ref_ord_no_search_field'));
  7. add_filter('parse_query', array($this, 'process_external_ref_ord_no_search')); // Uncommented this line
  8. }
  9. /**
  10. * Adds the external_ref_ord_no to the list of searchable fields for orders.
  11. *
  12. * @param array $search_fields The current array of searchable fields.
  13. * @return array The updated array of searchable fields.
  14. */
  15. public function add_external_ref_ord_no_to_search($search_fields) {
  16. $search_fields[] = '_external_ref_ord_no';
  17. return $search_fields;
  18. }
  19. /**
  20. * Adds a search field for external_ref_ord_no in the order list page.
  21. */
  22. public function add_external_ref_ord_no_search_field() {
  23. global $typenow;
  24. if ('shop_order' === $typenow) {
  25. $external_ref_ord_no = isset($_GET['external_ref_ord_no']) ? sanitize_text_field($_GET['external_ref_ord_no']) : '';
  26. ?>
  27. <input type="text" name="external_ref_ord_no" value="<?php echo esc_attr($external_ref_ord_no); ?>" placeholder="<?php esc_attr_e('Search by External Order Number', 'studiou-wc-ord-print-statuses'); ?>">
  28. <?php
  29. }
  30. }
  31. /**
  32. * Processes the external_ref_ord_no search query.
  33. *
  34. * @param WP_Query $query The current WordPress query object.
  35. * @return WP_Query The modified query object.
  36. */
  37. public function process_external_ref_ord_no_search($query) {
  38. global $pagenow, $typenow;
  39. if ('edit.php' !== $pagenow || 'shop_order' !== $typenow || !$query->is_main_query()) {
  40. return $query;
  41. }
  42. if (!empty($_GET['external_ref_ord_no'])) {
  43. $external_ref_ord_no = sanitize_text_field($_GET['external_ref_ord_no']);
  44. $meta_query = $query->get('meta_query') ? $query->get('meta_query') : array();
  45. $meta_query[] = array(
  46. 'key' => '_external_ref_ord_no',
  47. 'value' => $external_ref_ord_no,
  48. 'compare' => 'LIKE',
  49. );
  50. $query->set('meta_query', $meta_query);
  51. }
  52. return $query;
  53. }
  54. }