web-dev-qa-db-fra.com

Boucle de type de message personnalisé dans le code court

Je ne comprends vraiment pas pourquoi cela ne fonctionne pas:

J'utilise un shortcode pour afficher une requête sur un type de message personnalisé + taxonomie, voici le segment correspondant:

        // - arguments -
        $args = array(
            'post_type' => 'customposttypename',
            'taxonomyname' => 'alpha',
            'post_status' => 'publish',
        );

        // - query -
        $my_query = null;
        $my_query = new WP_query($args);
        while ($my_query->have_posts()) : $my_query->the_post();

        // - variables -
        $custom = get_post_custom($post->ID);

... et puis les variables continuent. En réalité, lorsque je lance la boucle, elle affiche tout le contenu de publication par défaut (titre, contenu, etc.), mais refuse d'afficher le contenu de type publication personnalisé et s'arrête à la dernière ligne (ligne 145), c'est-à-dire $custom = get_post_custom($post->ID); en me donnant l'erreur suivante ..

Avis: Variable non définie: publier dans C:\xampplite ...\functions.php à la ligne 145

Avis: Essayer d'obtenir la propriété de non-objet dans C:\xampplite ...\functions.php à la ligne 145

Ensuite, ici, il me montre le titre, le contenu, etc. normalement (tout simplement pas de contenu de type message personnalisé)

Quelqu'un a une idée de ce que je fais mal?

Je vous remercie!

1
Noel Tock

Remarque: Essayer d'obtenir la propriété de non-objet

Indiquerait que $post n'a pas de portée dans votre fonction. Une solution simple ici serait de globaliser $post afin qu’il ait une portée, ce qui corrige effectivement l’erreur.

Cependant, chaque fois que vous créez une requête, ou exécutez la boucle et appelez la méthode the_post, cela vous donne accès aux balises de modèle WordPress .

Plutôt que de mettre dans des déclarations globales, vous pouvez appeler get_the_ID() qui devrait bien sûr contenir l'identifiant de la publication donnée (c'est-à-dire la publication actuelle pour cette itération de la boucle).

Mettez à jour votre ligne de problème à lire ..

$custom = get_post_custom( get_the_ID() );

Et cela devrait éclaircir le problème, bien sûr, notant que donner $post à l'intérieur de la fonction fonctionnerait aussi, cela n'aurait pas l'air aussi poétique! ..;)

Une petite question à propos du retour au demandeur: que cherchez-vous lorsque vous appelez get_post_custom, recherchez-vous des clés méta particulières ou passez-vous en boucle sur chaque élément méta que vous avez trouvé? Il y a peut-être place à amélioration là-bas (si cela vous intéresse).

3
t31os