Ich mache ein Plugin, um Beiträge hinzuzufügen
Ich möchte eine Tabelle auf einer Seite im Plugin erstellen, um jeden Beitrag und die Anzahl der Likes anzuzeigen
function my_plugin_options() { echo 'Table of Likes
'; echo '
Post | '; echo 'Number of likes | '; echo '
'; the_title(); echo ' | '; echo ''; $likes; echo ' | '; 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
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
Post | Number of Likes | {$title} | {$likes} |
"; }
Das macht ein paar Dinge:
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.