Forum Replies Created

Viewing 4 replies - 1 through 4 (of 4 total)
  • Hi temes,

    I’ve just filed an issue to the WP core team on this. I’ve not got any evaluation or reply yet but hopefully this will come. I’ve made a fix that seems to work well and I’ve implemented this for one of my clients. Parent categories are now handled as they should. The problem is that my solution requires changes/corrections deep down in the WP core which eventually will be overwritten by an update of WP. I’ve so far not found a way to override the three core functions in question without modifying the core file.

    You’ll find my issue report here including link to the modified code https://core.trac.wordpress.org/ticket/39140.

    It was developed using WP 4.6.1 but it seems like WP 4.7 doesn’t have any changes or improvements to this subject.

    – Brede

    Hi,

    I have the same issue. I’ll try to explain the category config and where it seems to break:

    Product category config:
    CatA -> SubcatA
    CatB -> SubcatB

    Product1 is assigned SubcatA
    Product2 is assigned SubcatB
    Product3 is assigned both SubcatA and SubcatB

    Shortcode usage:
    1. [product_category category=”CatA” operator=”OR”] => Ok. Outputs Product1 and 3
    2. [product_category category=”CatA” operator=”AND”] => Wrong. Outputs NOTHING. Expected Product1 and 3

    3. [product_category category=”CatB” operator=”OR”] => Ok. Outputs Product2 and 3
    4. [product_category category=”CatB” operator=”AND”] => Wrong. Outputs NOTHING. Expected Product2 and 3

    5. [product_category category=”subcatA” operator=”AND”] => Ok. Outputs Product1 and 3
    6. [product_category category=”subcatB” operator=”AND”] => Ok. Outputs Product2 and 3

    7. [product_category category=”CatA,CatB” operator=”AND”] => Wrong. NOTHING. Expected Product3
    8. [product_category category=”subcatA,subcatB” operator=”AND”] => Ok. Outputs Product3

    9. [product_category category=”CatA,subcatB” operator=”AND”] => Wrong. NOTHING. Expected Product1 and 3
    10.[product_category category=”CatB,SubcatA” operator=”AND”] => Wrong. NOTHING. Expected Product2 and 3

    This seems to me that the implementation of AND doesn’t take into account the use of higher-up hierarchy codes correctly. When AND is used only the exact assigned product categories can be used to retrieve the products (as shown in 7 above). This is an unexpected restriction in the logic.

    Thanks for any input on this issue. I’ve tried to quality assure the examples above but please notify if anything is wrong. There IS an issue here but it still remains to see if it’s in the brain or in the code.

    The versions this code was made on:

    WordPress: 4.6
    WooCommerce: 2.6.4

    I have not verified compatibility with earlier versions.

    First time using this forum – exceeded the edit-time before I noticed that I had forgot to remove an echo line for test purposes. Reposting the corrected code and hopefully in a more readable format.

    add_filter( 'shop_order_search_custom_order_ids', 'shop_order_search_order_notes');
    
    function shop_order_search_order_notes ($post_ids) {
      global $pagenow, $wpdb;
    
      // Search order notes (from comments table)
      $post_ids = array_unique( array_merge(
        $wpdb->get_col(
          $wpdb->prepare( "
            SELECT comment_post_ID
            FROM {$wpdb->prefix}comments as comments
            WHERE comment_type = 'order_note'
            AND comment_content LIKE '%%%s%%'
            ",
            esc_attr( $_GET['s'] )
          )
        )
        , array()
      ) );
    
      return $post_ids;
    }
    
    class My_WC_Admin_Post_Types {
    
      public function shop_order_search_custom_fields( $wp ) {
        global $pagenow;
    
        if ( 'edit.php' != $pagenow || empty( $wp->query_vars['s'] ) || $wp->query_vars['post_type'] != 'shop_order' ) {
          return;
        }
    
        $post_ids = wc_order_search( $_GET['s'] );
    
        // BF: Added this line to enable to hook into the post_ids
        $post_ids = array_unique(array_merge( $post_ids, apply_filters('shop_order_search_custom_order_ids',array())));
    
        if ( ! empty( $post_ids ) ) {
          // Remove "s" - we don't want to search order name.
          unset( $wp->query_vars['s'] );
    
          // so we know we're doing this.
          $wp->query_vars['shop_order_search'] = true;
    
          // Search by found posts.
          $wp->query_vars['post__in'] = array_merge( $post_ids, array( 0 ) );
        }
      }
    }
    
    remove_action( 'parse_query', 'WC_Admin_Post_Types::shop_order_search_custom_fields' );
    add_action( 'parse_query', 'My_WC_Admin_Post_Types::shop_order_search_custom_fields' );
Viewing 4 replies - 1 through 4 (of 4 total)