4

I currently have this custom query which I am trying to filter the product (paintings) by artist.

                    $artistID = $_GET['artist_id'];

                    $args = array(
                      'post_type' => 'product',
                      'meta_query'     => array(
                        array(
                          'key'     => 'artist',
                          'value'   => $artistID
                        ) 
                      )
                    );

                $loop = new WP_Query( $args );

It isn't working at the moment...

When I run

var_dump(get_post_meta(get_the_ID()));

It outputs the following (interested in the artist key)... Can anyone help me write a query to only get the posts with the given value please? It's worth noting that the meta_data of the post is coming from advanced custom fields relationship field which is a Post Object.

array(41) {
      ["_edit_lock"]=>
      array(1) {
        [0]=>
        string(12) "1473170740:7"
      }
      ["_edit_last"]=>
      array(1) {
        [0]=>
        string(1) "7"
      }
      ["_thumbnail_id"]=>
      array(1) {
        [0]=>
        string(3) "279"
      }
      ["_product_attributes"]=>
      array(1) {
        [0]=>
        string(510) "a:3:{s:12:"pa_hang-type";a:6:{s:4:"name";s:12:"pa_hang-type";s:5:"value";s:0:"";s:8:"position";s:1:"0";s:10:"is_visible";i:1;s:12:"is_variation";i:0;s:11:"is_taxonomy";i:1;}s:18:"pa_limited-edition";a:6:{s:4:"name";s:18:"pa_limited-edition";s:5:"value";s:0:"";s:8:"position";s:1:"1";s:10:"is_visible";i:1;s:12:"is_variation";i:0;s:11:"is_taxonomy";i:1;}s:7:"pa_size";a:6:{s:4:"name";s:7:"pa_size";s:5:"value";s:0:"";s:8:"position";s:1:"3";s:10:"is_visible";i:1;s:12:"is_variation";i:0;s:11:"is_taxonomy";i:1;}}"
      }
      ["_visibility"]=>
      array(1) {
        [0]=>
        string(7) "visible"
      }
      ["_stock_status"]=>
      array(1) {
        [0]=>
        string(7) "instock"
      }
      ["total_sales"]=>
      array(1) {
        [0]=>
        string(1) "0"
      }
      ["_downloadable"]=>
      array(1) {
        [0]=>
        string(2) "no"
      }
      ["_virtual"]=>
      array(1) {
        [0]=>
        string(2) "no"
      }
      ["_tax_status"]=>
      array(1) {
        [0]=>
        string(7) "taxable"
      }
      ["_tax_class"]=>
      array(1) {
        [0]=>
        string(0) ""
      }
      ["_purchase_note"]=>
      array(1) {
        [0]=>
        string(0) ""
      }
      ["_featured"]=>
      array(1) {
        [0]=>
        string(2) "no"
      }
      ["_weight"]=>
      array(1) {
        [0]=>
        string(0) ""
      }
      ["_length"]=>
      array(1) {
        [0]=>
        string(0) ""
      }
      ["_width"]=>
      array(1) {
        [0]=>
        string(0) ""
      }
      ["_height"]=>
      array(1) {
        [0]=>
        string(0) ""
      }
      ["_sku"]=>
      array(1) {
        [0]=>
        string(0) ""
      }
      ["_regular_price"]=>
      array(1) {
        [0]=>
        string(2) "60"
      }
      ["_sale_price"]=>
      array(1) {
        [0]=>
        string(0) ""
      }
      ["_sale_price_dates_from"]=>
      array(1) {
        [0]=>
        string(0) ""
      }
      ["_sale_price_dates_to"]=>
      array(1) {
        [0]=>
        string(0) ""
      }
      ["_price"]=>
      array(1) {
        [0]=>
        string(2) "60"
      }
      ["_sold_individually"]=>
      array(1) {
        [0]=>
        string(0) ""
      }
      ["_manage_stock"]=>
      array(1) {
        [0]=>
        string(2) "no"
      }
      ["_backorders"]=>
      array(1) {
        [0]=>
        string(2) "no"
      }
      ["_stock"]=>
      array(1) {
        [0]=>
        string(0) ""
      }
      ["_upsell_ids"]=>
      array(1) {
        [0]=>
        string(6) "a:0:{}"
      }
      ["_crosssell_ids"]=>
      array(1) {
        [0]=>
        string(6) "a:0:{}"
      }
      ["_product_version"]=>
      array(1) {
        [0]=>
        string(5) "2.6.4"
      }
      ["_product_image_gallery"]=>
      array(1) {
        [0]=>
        string(3) "279"
      }
      ["artist"]=>
      array(1) {
        [0]=>
        string(3) "168"
      }
      ["_artist"]=>
      array(1) {
        [0]=>
        string(19) "field_57c6d280c7a91"
      }
      ["_yoast_wpseo_primary_product_cat"]=>
      array(1) {
        [0]=>
        string(2) "32"
      }
      ["_yoast_wpseo_focuskw_text_input"]=>
      array(1) {
        [0]=>
        string(23) "Worker Bee Wildlife Art"
      }
      ["_yoast_wpseo_focuskw"]=>
      array(1) {
        [0]=>
        string(23) "Worker Bee Wildlife Art"
      }
      ["_yoast_wpseo_linkdex"]=>
      array(1) {
        [0]=>
        string(2) "22"
      }
      ["_yoast_wpseo_content_score"]=>
      array(1) {
        [0]=>
        string(2) "30"
      }
      ["_wc_rating_count"]=>
      array(1) {
        [0]=>
        string(6) "a:0:{}"
      }
      ["_wc_average_rating"]=>
      array(1) {
        [0]=>
        string(1) "0"
      }
      ["_a3_dgallery"]=>
      array(1) {
        [0]=>
        string(3) "279"
      }
    }

Please also see the var_dump($loop) output as well.

                object(WP_Query)#8961 (49) {
  ["query"]=>
  array(2) {
    ["post_type"]=>
    string(7) "product"
    ["meta_query"]=>
    array(1) {
      [0]=>
      array(2) {
        ["key"]=>
        string(6) "artist"
        ["value"]=>
        string(3) "174"
      }
    }
  }
  ["query_vars"]=>
  array(65) {
    ["post_type"]=>
    string(7) "product"
    ["meta_query"]=>
    array(1) {
      [0]=>
      array(2) {
        ["key"]=>
        string(6) "artist"
        ["value"]=>
        string(3) "174"
      }
    }
    ["error"]=>
    string(0) ""
    ["m"]=>
    string(0) ""
    ["p"]=>
    int(0)
    ["post_parent"]=>
    string(0) ""
    ["subpost"]=>
    string(0) ""
    ["subpost_id"]=>
    string(0) ""
    ["attachment"]=>
    string(0) ""
    ["attachment_id"]=>
    int(0)
    ["name"]=>
    string(0) ""
    ["static"]=>
    string(0) ""
    ["pagename"]=>
    string(0) ""
    ["page_id"]=>
    int(0)
    ["second"]=>
    string(0) ""
    ["minute"]=>
    string(0) ""
    ["hour"]=>
    string(0) ""
    ["day"]=>
    int(0)
    ["monthnum"]=>
    int(0)
    ["year"]=>
    int(0)
    ["w"]=>
    int(0)
    ["category_name"]=>
    string(0) ""
    ["tag"]=>
    string(0) ""
    ["cat"]=>
    string(0) ""
    ["tag_id"]=>
    string(0) ""
    ["author"]=>
    string(0) ""
    ["author_name"]=>
    string(0) ""
    ["feed"]=>
    string(0) ""
    ["tb"]=>
    string(0) ""
    ["paged"]=>
    int(0)
    ["meta_key"]=>
    string(0) ""
    ["meta_value"]=>
    string(0) ""
    ["preview"]=>
    string(0) ""
    ["s"]=>
    string(0) ""
    ["sentence"]=>
    string(0) ""
    ["title"]=>
    string(0) ""
    ["fields"]=>
    string(0) ""
    ["menu_order"]=>
    string(0) ""
    ["embed"]=>
    string(0) ""
    ["category__in"]=>
    array(0) {
    }
    ["category__not_in"]=>
    array(0) {
    }
    ["category__and"]=>
    array(0) {
    }
    ["post__in"]=>
    array(0) {
    }
    ["post__not_in"]=>
    array(0) {
    }
    ["post_name__in"]=>
    array(0) {
    }
    ["tag__in"]=>
    array(0) {
    }
    ["tag__not_in"]=>
    array(0) {
    }
    ["tag__and"]=>
    array(0) {
    }
    ["tag_slug__in"]=>
    array(0) {
    }
    ["tag_slug__and"]=>
    array(0) {
    }
    ["post_parent__in"]=>
    array(0) {
    }
    ["post_parent__not_in"]=>
    array(0) {
    }
    ["author__in"]=>
    array(0) {
    }
    ["author__not_in"]=>
    array(0) {
    }
    ["ignore_sticky_posts"]=>
    bool(false)
    ["suppress_filters"]=>
    bool(false)
    ["cache_results"]=>
    bool(true)
    ["update_post_term_cache"]=>
    bool(true)
    ["lazy_load_term_meta"]=>
    bool(true)
    ["update_post_meta_cache"]=>
    bool(true)
    ["posts_per_page"]=>
    int(8)
    ["nopaging"]=>
    bool(false)
    ["comments_per_page"]=>
    string(2) "50"
    ["no_found_rows"]=>
    bool(false)
    ["order"]=>
    string(4) "DESC"
  }
  ["tax_query"]=>
  object(WP_Tax_Query)#8958 (6) {
    ["queries"]=>
    array(0) {
    }
    ["relation"]=>
    string(3) "AND"
    ["table_aliases":protected]=>
    array(0) {
    }
    ["queried_terms"]=>
    array(0) {
    }
    ["primary_table"]=>
    string(10) "wp_2_posts"
    ["primary_id_column"]=>
    string(2) "ID"
  }
  ["meta_query"]=>
  object(WP_Meta_Query)#8959 (9) {
    ["queries"]=>
    array(2) {
      [0]=>
      array(2) {
        ["key"]=>
        string(6) "artist"
        ["value"]=>
        string(3) "174"
      }
      ["relation"]=>
      string(2) "OR"
    }
    ["relation"]=>
    string(3) "AND"
    ["meta_table"]=>
    string(13) "wp_2_postmeta"
    ["meta_id_column"]=>
    string(7) "post_id"
    ["primary_table"]=>
    string(10) "wp_2_posts"
    ["primary_id_column"]=>
    string(2) "ID"
    ["table_aliases":protected]=>
    array(1) {
      [0]=>
      string(13) "wp_2_postmeta"
    }
    ["clauses":protected]=>
    array(1) {
      ["wp_2_postmeta"]=>
      array(5) {
        ["key"]=>
        string(6) "artist"
        ["value"]=>
        string(3) "174"
        ["compare"]=>
        string(1) "="
        ["alias"]=>
        string(13) "wp_2_postmeta"
        ["cast"]=>
        string(4) "CHAR"
      }
    }
    ["has_or_relation":protected]=>
    bool(false)
  }
  ["date_query"]=>
  bool(false)
  ["request"]=>
  string(453) "SELECT SQL_CALC_FOUND_ROWS  wp_2_posts.ID FROM wp_2_posts  INNER JOIN wp_2_postmeta ON ( wp_2_posts.ID = wp_2_postmeta.post_id ) WHERE 1=1  AND ( 
  ( wp_2_postmeta.meta_key = 'artist' AND wp_2_postmeta.meta_value = '174' )
) AND wp_2_posts.post_type = 'product' AND (wp_2_posts.post_status = 'publish' OR wp_2_posts.post_status = 'acf-disabled' OR wp_2_posts.post_status = 'private') GROUP BY wp_2_posts.ID ORDER BY wp_2_posts.post_date DESC LIMIT 0, 8"
  ["posts"]=>
  array(6) {
    [0]=>
    object(WP_Post)#8957 (24) {
      ["ID"]=>
      int(297)
      ["post_author"]=>
      string(1) "7"
      ["post_date"]=>
      string(19) "2016-09-07 15:23:42"
      ["post_date_gmt"]=>
      string(19) "2016-09-07 14:23:42"
      ["post_content"]=>
      string(0) ""
      ["post_title"]=>
      string(5) "Alone"
      ["post_excerpt"]=>
      string(0) ""
      ["post_status"]=>
      string(7) "publish"
      ["comment_status"]=>
      string(4) "open"
      ["ping_status"]=>
      string(6) "closed"
      ["post_password"]=>
      string(0) ""
      ["post_name"]=>
      string(5) "alone"
      ["to_ping"]=>
      string(0) ""
      ["pinged"]=>
      string(0) ""
      ["post_modified"]=>
      string(19) "2016-09-07 15:23:42"
      ["post_modified_gmt"]=>
      string(19) "2016-09-07 14:23:42"
      ["post_content_filtered"]=>
      string(0) ""
      ["post_parent"]=>
      int(0)
      ["guid"]=>
      string(55) "http://shop.localhost.com/?post_type=product&p=297"
      ["menu_order"]=>
      int(0)
      ["post_type"]=>
      string(7) "product"
      ["post_mime_type"]=>
      string(0) ""
      ["comment_count"]=>
      string(1) "0"
      ["filter"]=>
      string(3) "raw"
    }
    [1]=>
    object(WP_Post)#8956 (24) {
      ["ID"]=>
      int(295)
      ["post_author"]=>
      string(1) "7"
      ["post_date"]=>
      string(19) "2016-09-07 09:36:34"
      ["post_date_gmt"]=>
      string(19) "2016-09-07 08:36:34"
      ["post_content"]=>
      string(0) ""
      ["post_title"]=>
      string(11) "Reef Glider"
      ["post_excerpt"]=>
      string(69) "This is a description of the Product. It does not need to be entered."
      ["post_status"]=>
      string(7) "publish"
      ["comment_status"]=>
      string(4) "open"
      ["ping_status"]=>
      string(6) "closed"
      ["post_password"]=>
      string(0) ""
      ["post_name"]=>
      string(11) "reef-glider"
      ["to_ping"]=>
      string(0) ""
      ["pinged"]=>
      string(0) ""
      ["post_modified"]=>
      string(19) "2016-09-19 12:06:24"
      ["post_modified_gmt"]=>
      string(19) "2016-09-19 11:06:24"
      ["post_content_filtered"]=>
      string(0) ""
      ["post_parent"]=>
      int(0)
      ["guid"]=>
      string(55) "http://shop.localhost.com/?post_type=product&p=295"
      ["menu_order"]=>
      int(0)
      ["post_type"]=>
      string(7) "product"
      ["post_mime_type"]=>
      string(0) ""
      ["comment_count"]=>
      string(1) "0"
      ["filter"]=>
      string(3) "raw"
    }
    [2]=>
    object(WP_Post)#8955 (24) {
      ["ID"]=>
      int(293)
      ["post_author"]=>
      string(1) "7"
      ["post_date"]=>
      string(19) "2016-09-07 09:33:30"
      ["post_date_gmt"]=>
      string(19) "2016-09-07 08:33:30"
      ["post_content"]=>
      string(0) ""
      ["post_title"]=>
      string(16) "Heart of The Sea"
      ["post_excerpt"]=>
      string(0) ""
      ["post_status"]=>
      string(7) "publish"
      ["comment_status"]=>
      string(4) "open"
      ["ping_status"]=>
      string(6) "closed"
      ["post_password"]=>
      string(0) ""
      ["post_name"]=>
      string(16) "heart-of-the-sea"
      ["to_ping"]=>
      string(0) ""
      ["pinged"]=>
      string(0) ""
      ["post_modified"]=>
      string(19) "2016-09-19 16:48:53"
      ["post_modified_gmt"]=>
      string(19) "2016-09-19 15:48:53"
      ["post_content_filtered"]=>
      string(0) ""
      ["post_parent"]=>
      int(0)
      ["guid"]=>
      string(55) "http://shop.localhost.com/?post_type=product&p=293"
      ["menu_order"]=>
      int(0)
      ["post_type"]=>
      string(7) "product"
      ["post_mime_type"]=>
      string(0) ""
      ["comment_count"]=>
      string(1) "0"
      ["filter"]=>
      string(3) "raw"
    }
    [3]=>
    object(WP_Post)#8954 (24) {
      ["ID"]=>
      int(291)
      ["post_author"]=>
      string(1) "7"
      ["post_date"]=>
      string(19) "2016-09-06 16:46:38"
      ["post_date_gmt"]=>
      string(19) "2016-09-06 15:46:38"
      ["post_content"]=>
      string(0) ""
      ["post_title"]=>
      string(6) "Escape"
      ["post_excerpt"]=>
      string(0) ""
      ["post_status"]=>
      string(7) "publish"
      ["comment_status"]=>
      string(4) "open"
      ["ping_status"]=>
      string(6) "closed"
      ["post_password"]=>
      string(0) ""
      ["post_name"]=>
      string(6) "escape"
      ["to_ping"]=>
      string(0) ""
      ["pinged"]=>
      string(0) ""
      ["post_modified"]=>
      string(19) "2016-09-06 16:46:38"
      ["post_modified_gmt"]=>
      string(19) "2016-09-06 15:46:38"
      ["post_content_filtered"]=>
      string(0) ""
      ["post_parent"]=>
      int(0)
      ["guid"]=>
      string(55) "http://shop.localhost.com/?post_type=product&p=291"
      ["menu_order"]=>
      int(0)
      ["post_type"]=>
      string(7) "product"
      ["post_mime_type"]=>
      string(0) ""
      ["comment_count"]=>
      string(1) "0"
      ["filter"]=>
      string(3) "raw"
    }
    [4]=>
    object(WP_Post)#8772 (24) {
      ["ID"]=>
      int(289)
      ["post_author"]=>
      string(1) "7"
      ["post_date"]=>
      string(19) "2016-09-06 16:02:57"
      ["post_date_gmt"]=>
      s…
0

You're almost there -- you just need to add the comparison to your meta query:

$args = array(
  'post_type' => 'product',
  'meta_query'     => array(
    array(
      'key'     => 'artist',
      'value'   => $artistID,
      'compare' => '='
    ) 
  )
);

https://codex.wordpress.org/Class_Reference/WP_Meta_Query

Remember to filter $artistID before accepting it in your query!

  • Unfortunately it's still showing all of them! No idea as to why! Any other thoughts? :/ – Thomas_Hoadley Sep 22 '16 at 12:50
  • Thomas, does it make any difference if you add relation => 'AND' in the meta_query array? – Ahmed Fouad Sep 22 '16 at 12:56
  • Unfortunately it does not Ahmed! – Thomas_Hoadley Sep 22 '16 at 12:58
  • Are you using the $loop object variable to set up your products loop? i.e. if ($loop->have_posts()) : while ($loop->have_posts()) : $loop->the_post(); endwhile; endif;? Your WP_Query object looks fine, and your SQL seems OK too – FaCE Sep 22 '16 at 13:19
  • 1
    Ahhh.. you're using ACF. Then you need to get the actual ACF custom field key which is hashed -- edit the custom field and in screen options click 'field key'. This is the thing that you need to search for in the meta_query – FaCE Sep 22 '16 at 14:17
0

firstly in term of security you need to filter the artist_id variable before accepting it, secondly you should run the var_dump(get_post_meta(get_the_ID())) inside the query loop, try the following code it should work for you :

<?php 
    $artistID = filter_input(INPUT_GET, 'artist_id', FILTER_SANITIZE_NUMBER_INT);
    $args = array(
        //Type & Status Parameters
        'post_type'   => 'product',
        //Order & Orderby Parameters
        'order'               => 'DESC',
        'orderby'             => 'date',

        //Pagination Parameters
        'posts_per_page'         => -1,
        //Custom Field Parameters
        'meta_key'       => 'artist',
        'meta_value'     => $artistID,
        'meta_compare'   => '=',

    );

$query = new WP_Query( $args );

if ($query->have_posts()) {
    while($query->have_posts()) {
        $query->the_post();
        global $post;
        var_dump(get_post_meta($post->ID);
    }
}

?>

  • Thank you for your answer Amine. I have tried implementing it however it did not work. – Thomas_Hoadley Sep 23 '16 at 7:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.