it-swarm.com.de

get_post_meta im Sitewide-Tag-Plugin gibt keinen Wert für benutzerdefinierte Felder zurück

Hier ist ein weiteres Rätsel, mit dem ich spiele. Es gibt eine Routine im Seiten-Plugin für Tags auf der ganzen Site , die eine Liste benutzerdefinierter Felder (in den Admin-Einstellungen eingegeben) verwendet und diese dann als Schlüssel zum Lesen eines Posts und zum Ausgeben der Schlüssel und verwendet Werte in einem Array. Ich konnte es nicht sehen und versuche daher herauszufinden, warum.

Hier ist die Routine in sitewide-tags.php: http://wordpress.org/extend/plugins/wordpress-mu-sitewide-tags/

*** line 369 in Version: 0.4.1.1 of sitewide-tags.php ***

$meta_keys = apply_filters( 'sitewide_tags_meta_keys', get_sitewide_tags_option( 'tags_blog_postmeta', array() ) );
    $global_meta['DEBUG TEST1'] = $meta_keys;
    $global_meta['DEBUG TEST2'] = $post_id;
if( is_array( $meta_keys ) && !empty( $meta_keys ) ) {
    foreach( $meta_keys as $key )
            $global_meta['DEBUG TEST3'] = 'custom loop';

        $global_meta[$key] = get_post_meta( $post->ID, $key, true );
}
unset( $meta_keys );

Ich habe eine kleine Menge Markup hinzugefügt, um zu zeigen, was bei jedem Schritt passiert.

Für meinen Testfall, post_id # 1121, gibt es ein benutzerdefiniertes Feld in der Tabelle wp_9_postmeta, das einen Metaschlüssel image mit einem entsprechenden Metawert http://newsite.com/files/2011/05/alfaP.jpg enthält.

Die Routine gibt jedoch keinen Wert innerhalb der Funktion zurück.

Hier ist, was jeder der Debug-Tests zeigt;

DEBUG TEST1:

a:7:{i:0;s:11:"video-embed";i:1;s:9:"image-url";i:2;s:8:"link-url";i:3;s:10:"quote-copy";i:4;s:12:"quote-author";i:5;s:9:"quote-url";i:6;s:9:"audio-url";}

DEBUG TEST2: 1121
DEBUG TEST3: Custom Loop

Der erste Test (Nr. 1) zeigt also, dass alle benutzerdefinierten Felder vom 'get_sitewide_tags_option' in Zeile 1 zurückgegeben werden. Der zweite Test (Nr. 2) bestätigt, dass die richtige post_id angezeigt wird, und der dritte Test (Nr. 3), die er erreicht foreach-Schleife und übergibt daher die Bedingungsklausel.

BEARBEITEN: Ein weiterer Test besteht darin, in der foreach-Schleife zu prüfen, welcher Wert in $key enthalten ist. Ich habe festgestellt, dass $key die meta_key-Namen (Bild, Video-Einbettung ...) enthält, die (theoretisch) erfolgreich sein sollten, wenn wird verwendet, um den zugehörigen Wert mit 'get_post_meta' abzurufen.

Ich würde gerne wissen, warum nicht - irgendwelche Ideen oder Vorschläge?

2
DoctorDR

Ich habe gerade ein ähnliches Problem auf einer Site gelöst, an der ich arbeite. Ich konnte keine Meta-Werte aus Beiträgen abrufen, nachdem ich meinen Loop-Code in ein Plugin verschoben habe.

Es stellt sich heraus, dass der Zugriff auf Post-Meta anders ist, wenn eine Schleife innerhalb eines Sitewide-Plugins ausgeführt wird.

Anstatt dies zu schreiben:

get_post_meta ($ post-> ID, 'start-time', true);

du musst folgendes schreiben:

get_post_meta (get_the_ID (), 'start-time', true);

Beachten Sie, dass sich der erste Parameter $ post-> ID in get_the_ID () ändert. Dies hat das Problem für mich behoben, hoffentlich auch für Sie!

2
barbara