0

I want to only return one value for this query, it's in my functions.php file. The idea is to return a value that I need once post_meta has been updated. It's returning the same (correct) value 5 times... I only want the value to be returned once.

add_action( 'added_post_meta', 
    function ( $mid, $object_id, $meta_key, $_meta_value) {
        global $wpdb;
        $table_name = $wpdb->prefix . 'postmeta';
        $results = $wpdb->get_var(
            "SELECT meta_value FROM " . $table_name . 
            " WHERE meta_key = 'data19' AND post_id = " .$object_id. " " );
    }, 
    10, 4 );

Any ideas how I can get just one value returned? I've tried:

  • adding Group by to the end
  • adding OBJECT_K to the end
  • using SELECT DISTINCT
  • using MAX before each value
  • using FIRST before each value
  • using wp_reset_query()

and some more I can't even recall.

1 Answer 1

1

The most likely cause is that the hook is probably running multiple times (e.g. once per meta field). You may need to qualify/filter your function like so…

add_action( 'added_post_meta', function ( $mid, $object_id, $meta_key, $_meta_value) {
  global $wpdb;

  if ( $meta_key != 'data19' ) {
    return;
  }

  $table_name = $wpdb->prefix . 'postmeta';
  $results = $wpdb->get_var(
    "SELECT meta_value FROM " . $table_name . 
    " WHERE meta_key = 'data19' AND post_id = " .$object_id. " " );

}, 10, 4 );
3
  • 1
    added_post_meta is a WP hook, and should check $meta_key != 'data19' (not $mid) based on sql query...
    – bonger
    Aug 1, 2015 at 2:40
  • updated_{$meta_type}_meta is the hook. It's called once per add_metadata() call on the post post type. Aug 1, 2015 at 2:58
  • 1
    Yes- the hook was being called multiple times... once for each of the meta_value that were created. Using @MattvanAndel 'filter/qualify' idea, and replacing the code with what @bonger suggested... I now have the value being returned just once. So, when I inserted this as the qualification code: if ( $meta_key != 'data19' ) {return;} ... it worked perfectly. I've updated the code.
    – Jonirish
    Aug 1, 2015 at 21:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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