WordPress.org

Ready to get started?Download WordPress

Forums

Help in creating a loop for post_id and meta_value tables (12 posts)

  1. Zilli
    Member
    Posted 2 years ago #

    Hi there,

    Can someone help me to create a loop to read all the meta_value records from a given post_id? The idea is to gather all the meta_value's data from wp_postmeta table related to post_id number and print them as a list.

  2. vtxyzzy
    Member
    Posted 2 years ago #

    There is sample code in the Codex here:

    http://codex.wordpress.org/Function_Reference/get_post_custom

  3. Zilli
    Member
    Posted 2 years ago #

    Thanks for your help.

    I created the follow shortcode and put it on functions.php, but it doesn't return anything.

    //Applications list short-code
    
    function jb_applicant() {
    global $wpdb;
    $custom_fields = get_post_custom(2171); //2171 is the post_id that I'm trying to gather the data from
      $my_custom_field = $custom_fields['my_custom_field'];
      foreach ( $my_custom_field as $key => $value )
        echo $key . " => " . $value . "<br />";
    }
    
    add_shortcode('applicant', 'jb_applicant');

    Any idea what could be?

    Thanks

  4. vtxyzzy
    Member
    Posted 2 years ago #

    Couple of changes. Needed an opening brace on the foreach line and a closing one before the add_shortcode.

    Also, in order to show the output where the shortcode is placed, it needs to be returned, not echoed.

    Give this version a try:

    function jb_applicant() {
       global $wpdb;
       $custom_fields = get_post_custom(2171); //2171 is the post_id that I'm trying to gather the data from
       $my_custom_field = $custom_fields['my_custom_field'];
       $op = '';
       foreach ( $my_custom_field as $key => $value ) {
          $op .= $key . " => " . $value . "<br />";
       }
       return $op;
    }
    add_shortcode('applicant', 'jb_applicant');
  5. Zilli
    Member
    Posted 2 years ago #

    Thanks, but it still returning nothing.

  6. vtxyzzy
    Member
    Posted 2 years ago #

    Perhaps the post ID or the custom field name is not correct.

    Try adding some test text to the output. Instead of this:

    $op = '';

    use this:

    $op = '<h2>This is a test</h2>';

  7. Zilli
    Member
    Posted 2 years ago #

    I can see the test text.

    I'm sure that there are records on post_id 2171. Just to be sure, the get_post_custom( ), will fetches meta_key and meta_value's data from that given post_id, right?

  8. vtxyzzy
    Member
    Posted 2 years ago #

    That is correct, but this line:

    $my_custom_field = $custom_fields['my_custom_field'];

    selects only those meta_keys equal to 'my_custom_field'.

    Is that what you want?

  9. Zilli
    Member
    Posted 2 years ago #

    Exactly.

  10. vtxyzzy
    Member
    Posted 2 years ago #

    Well, I can't explain it. The code worked for me on my test site, and the test text proves that it is being called.

    The only two other things that I can see that could cause the problem are the post_id and the meta_key value.

  11. Zilli
    Member
    Posted 2 years ago #

    Sorry to restart this thread, but now I can explain things better. So, let me try one more time.

    I'm trying to create a loop to read all the meta_value records from a given post_id. The idea is to gather all the meta_value's data from wp_postmeta table related to post_id number and print them as a list. But so far, I couldn't make this work. The issue is my 'custom_fields' variable. There I need to put my meta_key. But I have several meta_key per post_id. For example, the post_id 2171 has data2,date3,data4,data5.. data19 as meta_key. So, how can I get this working?

    function jb_applicant() {
       global $wpdb;
       $custom_fields = get_post_custom(2171);
       $my_custom_field = $custom_fields['data2'];
       $op = '';
       foreach ( $my_custom_field as $key => $value ) {
          $op .= $key . " => " . $value . "<br />";
       }
       return $op;
    }
    add_shortcode('applicant', 'jb_applicant');
  12. vtxyzzy
    Member
    Posted 2 years ago #

    If you want to print all meta_keys except selected ones, try this:

    function jb_applicant() {
       global $wpdb;
       $except = array( 'except-1', 'except-2' );
       $custom_fields = get_post_custom(2171);
       $op = '';
       foreach ( $custom_fields as $my_custom_field ) {
          foreach ( $my_custom_field as $key => $value ) {
             if (in_array($key,$except)) continue;
             $op .= $key . " => " . $value . "<br />";
          }
       }
       return $op;
    }
    add_shortcode('applicant', 'jb_applicant');

    Replace 'except-1' etc with keys to skip.

Topic Closed

This topic has been closed to new replies.

About this Topic