get_post_meta in WP_Query

'; echo ''; echo ''; echo ''; echo ''; echo ''; // -- WP_Query -- $like_args = array( 'post_type' => 'post', 'order' => 'DES', 'post_status' => 'publish' ); $like_loop = new WP_Query($like_args); if($like_loop->have_posts()): while($like_loop->have_posts()): $like_loop->the_post(); // -- WP_Query -- $likes = get_post_meta( $like_loop->post_ID, "_like_amount", true); echo ''; echo ''; echo ''; echo ''; endwhile; endif; wp_reset_postdata(); echo '
PostNumber of likes
'; the_title(); echo ''; $likes; echo '
'; }

Ich habe ein Meta-Feld in jedem Beitrag “_like_amount”, das ist die Anzahl der Likes.

Wie verwende ich get_post_meta, um das Meta-Feld in meiner WP_Query Schleife WP_Query ?

ich habe es versucht

 $likes = get_post_meta( $like_loop->post_ID, "_like_amount", true); 

Aber es scheitert

Solutions Collecting From Web of "get_post_meta in WP_Query"

Originalplakat zeigt an, dass dies die Lösung ist:

 global $post; $likes = get_post_meta( $post->ID, "_like_amount", true); 

Das Problem war die aktuelle Post-ID

Wenn Sie eine Menge Posts ziehen (oder einfach die Anzahl der Anfragen reduzieren möchten), würde ich Ihnen empfehlen, die Dinge ein wenig zu überarbeiten.

Erstellen Sie zuerst eine Filterfunktion, um die Abfrage, die Sie gerade erstellen möchten, zu ändern.

 function filter_query_add_likes( $clauses, WP_Query $wp_query ) { if ( !is_admin() && !$wp_query->is_main_query() ) { global $wpdb; # Add your wanted meta value in as times_liked $clauses['fields'] .= ', IFNULL( meta_like.meta_value, 0 ) as times_liked '; # Join the postmeta field based on the post id and the key wanted # - this assumes you only have one times_liked meta for each post id! $clauses['join'] .= < <prefix}postmeta AS meta_like ON meta_like.post_id = {$wpdb->prefix}posts.ID AND meta_like.meta_key = '_like_amount' SQL; } return $clauses; } 

Verwenden Sie als Nächstes diesen Filter, direkt bevor Sie Ihre Abfrage ausführen, um Ihr Likes-Feld in jedem Post zurück zu erhalten.

 function my_plugin_options() { # Same as what you did, just using heredoc echo < <Table of Likes

HTML; $like_args = array( 'post_type' => 'post', 'order' => 'DES', 'post_status' => 'publish' ); # Set our new filter query to apply for this query add_filter('posts_clauses', 'filter_query_add_likes', 10, 2); $like_loop = new WP_Query( $like_args ); # Remove our filter query to avoid touching other queries on accident remove_filter('posts_clauses', 'filter_query_add_likes', 10, 2); if ( $like_loop->have_posts() ) { while ( $like_loop->have_posts() ) { # using next_post like this pulls your posts out for easy access $current_post = $like_loop->next_post(); # your times_like (from the filter) can now be accessed without # having to do an extra query with get_post_meta() $likes = $current_post->times_liked; # your title can be pulled right in if wanted $title = $current_post->post_title; # Draw your column echo < <

HTML; } } # End the table echo "\r\n

Post Number of Likes
{$title} {$likes}

"; }

Das macht ein paar Dinge:

  • Sie verwenden jetzt nur eine einzige Abfrage, um alle Ergebnisse, die Sie anzeigen möchten, einzutragen
  • Sie können einfach aus dem Post-Objekt ziehen, was Sie wollen, einschließlich der Anzahl der Male, die der Post gefallen hat.
  • Wenn in einem Beitrag noch keine Likes gezählt werden, erhält es 0 aufgrund des ISNULL-Aufrufs, der beim Bearbeiten der fields-Klausel erfolgt.

Alles in allem, viel schneller als mit get_post_meta, besonders wenn Sie mit vielen Posts zu tun haben.

Sobald Sie $like_loop->the_post() die globale $post Variable auf den aktuellen Post in der Schleife gesetzt, was Sie also wollen:

 $likes = get_post_meta( $post->ID, "_like_amount", true); 

Oder…

 $likes = get_post_meta( get_the_ID(), "_like_amount", true); 

… die unter Umständen etwas robuster ist.

Allerdings weiß ich nicht, was Sie mit “Wie benutze ich dieses Meta-Feld in meiner WP_Query ” meinen. Der Code, den Sie als Beispiel bereitstellen, hat wenig mit WP_Query zu tun, und wenn Sie diesen Wert in die Abfrageargumente einschließen möchten, erklären Sie nicht, nach welchen Bedingungen Sie WP_Query möchten.