Je suis nouveau sur WordPress et j'ai un problème avec "The Loop". J'ai 2 types de message personnalisés nommés 'livre' et 'auteur'. Dans le type de message d'auteur, j'ai une case à cocher classée qui permet de choisir entre l'auteur et le traducteur. aussi dans le type de livre j'ai 2 metaboxs dont l'utilisateur doit choisir le nom de l'auteur et le traducteur parmi ceux-ci. tout metabox et type de message personnalisé fonctionnent bien, mais quand je veux les appeler et utiliser les valeurs de chaque méta-boîte, j'ai un problème. mon code peut lire les valeurs d'auteur bien, mais les valeurs du traducteur montrent juste la dernière valeur d'auteur et je ne peux pas comprendre pourquoi cela se produit? Je pense que c'est le problème. mais je ne sais pas comment puis-je le résoudre. voici mon code pour single-book.php
<?php $args = array( 'post_type' => 'book');
$loop = new WP_Query( $args );
while ( have_posts() ) : the_post();
// for reading author which choose from cheak box in each book pages.
$post_id = get_the_ID();
$key = 'save-author-to-book';
$key2='save-trans-to-book';
$vals=get_post_meta($post_id, $key2, true);
$values = get_post_meta( $post_id, $key, true );
$feat_image = wp_get_attachment_url( get_post_thumbnail_id($post->ID) );
?>
echo '<h4 class="text-right color-style"> نویسنده : ';
foreach($values as $value){
$author=get_post($value);
echo '<a href="'.
get_post_permalink($value).'" target="_blank">'.
$author->post_title .'</a> ، ' ;}
echo '</h4>';
echo '<h4 class="text-right color-style"> مترجم : ';
foreach($vals as $val){
$trans=get_post($val);
echo '<a href="'.
get_post_permalink($val).'" target="_blank">'.
$author->post_title.'</a>، ';}
echo '</h4>';
n'importe quelle idée est la bienvenue.
Je crois que votre problème est avec $vals=get_post_meta($post_id, $key2, true);
Si vous vérifiez le codex, le dernier paramètre pour get_post_meta est de renvoyer une valeur unique ou un tableau de valeurs. Vous l'avez défini sur true
, ce qui signifie que vous ne renvoyez qu'une seule valeur.
Essayez-le avec false
(valeur par défaut), cela devrait fonctionner.
Je ne peux pas commenter bynicolas répondre, mais je suis d'accord avec lui. Si j'ai bien compris votre problème, c'est parce que vous utilisez true
à la fin de:
$vals=get_post_meta($post_id, $key2, true);
$values = get_post_meta( $post_id, $key, true );
Lorsque vous utilisez true, à partir du Codex :
$ single (bool) (Facultatif) Indique s'il faut renvoyer une valeur unique.
Return (mixed) Sera un tableau si $ single est faux. Sera la valeur du champ de métadonnées si $ single est vrai.
Vous ne pouvez pas foreach
une string
, seulement arrays
, donc pourquoi si vous n'utilisez pas false
à la place, votre code ne fonctionnera pas.
Ou, si vous ne voulez que le premier résultat du post_meta
, continuez à utiliser true
, mais pourquoi utilisez-vous le foreach? Vous n'en avez pas besoin, vous pouvez simplement utiliser ceci:
if($value != '') {
$author=get_post($value);
echo '<a href="'.get_post_permalink($value).'" target="_blank">'.$author->post_title .'</a> ، ' ;
}
Attention à la ligne 11:
$feat_image = wp_get_attachment_url( get_post_thumbnail_id($post->ID) );
?>
echo '<h4 class="text-right color-style"> نویسنده : ';
Utilisez-vous exactement ce code? Comme vous fermez la syntaxe PHP exactement après avoir récupéré le $feat_image
, le code continue avec la syntaxe PHP telle que echo
.
Je crois que le code se casse à cause de ce petit ?>
et que la première boucle ne se termine jamais.