web-dev-qa-db-fra.com

get_post_meta dans le plugin balises sitewide échoue pour renvoyer la valeur pour les champs personnalisés

Voici une autre énigme que je suis en train de jouer. Il y a une routine dans le plugin (=) des pages de balises de site qui prend une liste de champs personnalisés (entrés dans les paramètres de l'administrateur), puis les utilise comme clés pour lire un message et pour afficher les clés et valeurs dans un tableau. Je n’ai pas pu le voir fonctionner et j’essaie donc de déterminer pourquoi.

Voici la routine dans 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 );

J'ai ajouté une petite quantité de balisage pour révéler ce qui se passe à chaque étape.

Pour mon cas de test, post_id n ° 1121, il existe un champ personnalisé situé dans la table wp_9_postmeta qui a une méta_key image avec une meta_value correspondante http://newsite.com/files/2011/05/alfaP.jpg

Cependant, la routine ne renvoie aucune valeur dans la fonction.

Voici ce que chacun des tests de débogage montre.

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

Ainsi, le premier test (n ° 1) indique que tous les champs personnalisés sont renvoyés à partir du 'get_sitewide_tags_option' de la ligne 1. Le deuxième test (n ° 2) confirme qu'il recherche le bon post_id et que le troisième test (n ° 3) atteint le foreach boucle et passe donc la clause conditionnelle.

EDIT: Un autre test consiste à vérifier dans la boucle foreach et à voir quelle valeur est contenue dans $key - ce que j’ai trouvé est que $key contient les noms meta_key (image, video-embed ...) qui devraient (en théorie) être réussis lorsque utilisé pour récupérer la valeur associée en utilisant 'get_post_meta'.

J'aimerais savoir pourquoi ça ne marche pas - des idées ou des suggestions?

2
DoctorDR

Je viens de résoudre un problème similaire sur un site sur lequel je travaille: je ne pouvais obtenir aucune méta-valeur des messages après avoir déplacé mon code de boucle dans un plugin.

Il s'avère que lorsque vous avez une boucle exécutée depuis un plugin à l'échelle du site, la façon dont vous accédez à post meta est différente.

Au lieu d'écrire ceci:

get_post_meta ($ post-> ID, 'heure de début', true);

vous devez écrire ceci:

get_post_meta (get_the_ID (), 'heure de début', true);

Notez que le premier paramètre, $ post-> ID devient get_the_ID () . Cela a réglé le problème pour moi, j'espère que ça le sera aussi pour vous!

2
barbara