8795 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai créé une fonction pour un shortcode wordpress.
En dur, j'écris mon php de la sorte, ca fonctionne nikel :

<?php  echo get_post_meta($post->ID, 'tarif', true); ?>


Mais dans ma fonction, je suis obligé de l'écrire différemment, j'ai essayé ca. Mais cela ne fonctionne pas, rien ne s'affiche en front.

 $output .= '<p>A partir de<br /> <span class="apartirde">' . get_post_meta($post->ID, 'tarif', true) . '</span></p>';


Même chose pour mon fichier de traduction :

J'écris en php normal :

<?php _e('A partir de','theme'); ?> 


Mais dans ma fonction, j'ai essayé de récupérer cette donnée en faisant :

$output .= '' . _e('A partir de','theme') . '';


Mais rien n'y fait ca ne marche pas non plus. Je sais pas vraiment comment écrire mon code du coup. Merci pour votre précieuse aide.
Salut !

A la va vite le premier je pourrais pas te dire, mais le deuxième utilise plus tôt : __() au lieu de _e()
Tu as fait un var_dump($post) pour savoir si la variable est bien déclaré ?
Sinon utilise the_post() pour l'initialiser.
Je te mets le code en entier regarde : Code que j'ai insérer dans mon fichier shortcode.php.

function theme_chambres_shortcode( $atts, $content = null ) {

	extract( shortcode_atts( array(
		"term" => '',
	), $atts));
	
		$output = '';

		
	if ( $term != '' ) {
		$chambres = new WP_Query( array( 'post_type' => 'chambres', 'taxonomy' => 'type', 'term' => $term, 'posts_per_page' => 10, 'order' => 'ASC', ) );
	} else {
		$chambres = new WP_Query( array( 'post_type' => 'chambres', 'taxonomy' => 'type', 'posts_per_page' => 10, 'order' => 'ASC', ) );
	   }
                                                                                                          
	while ( $chambres->have_posts() ) : $chambres->the_post(); 
		
		    $output .= '<article class="room">';
		    $output .= '<div class="galerie article_big_img">';
			$output .= '<a href="' .get_permalink() .'">' . get_the_post_thumbnail($post_id, array(450, 250)) . '<span class="roll" ></span></a>';
			$output .= '</div>';
			$output .= '<div class="chambreinfos">';
			$output .= '<h2>' . get_the_title() . '</h2>' . get_the_excerpt() . '';
		    $output .= '<div class="colonne deux">';
		    $output .= '<p style="text-align: center; font-size:25px; line-height:35px; margin:20px 0 0 0">A partir de<br /> <span class="apartirde">' . get_post_meta($post->ID, 'tarif', true) . '</span></p>';
		    $output .= '</div>';
		    $output .= '<div class="colonne deux last"><a class="btn bleu" href="/tarifs-reservation">Reserver</a><a class="btn rouge" href="' . get_the_permalink() . '">Details</a>';
		    $output .= '</div>';
			
            $output .= '</div>';
            $output .= '</article>';
            $output .= '<div class="cb"></div>';
		
	endwhile;
	      
	     	
	     	
	return $output;
	
}

add_shortcode( 'chambres', 'theme_chambres_shortcode' ); 
Merci pour le code, mais comme ça je ne vois pas grand choses de dérangeant.

Après je n'ai pas ton plugin/theme/etc ... donc je ne pourrais pas t'aider plus. Fais des var_dump($var) pour vérifier chaque variables à chaque lignes. Cherche aussi dans le codex de Wordpress le fonctionnement et l'utilisation de chaque fonctions Wordpress que tu utilise.
En fait c'est ' . get_post_meta($post->ID, 'tarif', true) . ' qui ne marche pas, rien n'apparait. Car dans le code d'originie; c'est <?php echo get_post_meta($post->ID, 'tarif', true); ?> Du coup, j'ai essayé de mettre
' . echo get_post_meta($post=>ID, 'tarif', true) . ' Mais ca me mets une erreur. Je ne sais pas comment rendre visible cette variable dans le shortode.
Salut,

C'est normal que le ...' . echo get_post_meta($post->ID, 'tarif', true) . '... ne fonctionne pas, tu ne peux pas utiliser 'echo' dans une concaténation, ça n'est pas vraiment une fonction et ne se comporte du coup pas comme tel.

As-tu essayé d'afficher get_post_meta($post->ID, 'tarif', true) dans un var_dump() ?
Par exemple ici :
while ( $chambres->have_posts() ) : $chambres->the_post();
  var_dump(get_post_meta($post->ID, 'tarif', true);

Il faut savoir ce qu'il y a dans ce retour de fonction.

Par ailleurs, il faut s'assurer que ta 'key' ('tarif') est bien correcte. Pour cela, retourne l'ensemble des metas du post :
var_dump(get_post_meta($post->ID);

Ça te retournera un tableau avec l'ensemble des clés/valeurs des metas du post.

Est-ce que ton $post->ID est bien déclaré dans cette boucle ?

Poste ensuite le retour des var_dump(), ça pourra faire avancer le shmilblik Smiley langue

Pour finir, la doc de WP est plutôt bien faite et complète, essaie de bien comprendre comment la fonction get_post_meta() fonctionne si elle ne te renvoie rien.
Modifié par MatthieuR (20 May 2015 - 11:22)
Bonjour Matthieu, merci pour tous tes conseils.
En effet, comprendre le php propre à wordpress avec le codex, ca va. Par contre dès que j'utilise une "concaténation" pour mes shortcodes, je galère, car l'écriture n'est pas la même et il faut comprendre comment cela fonctionne, et je n'ai pas le niveau.
Je vais essayer de faire ce que tu me dis et te tiens au courant. Merci encore.
Matthieu,
Sans utiliser le shortocde, en mettant ma boucle php wordpress directement dans le code de ma page, j'ai ca :

Pour le var_dump(get_post_meta($post->ID, 'tarif', true)); =
string(7) "125 €"


Pour le var_dump(get_post_meta($post->ID)); =
array(4) { ["_edit_last"]=> array(1) { [0]=> string(1) "1" } ["_edit_lock"]=> array(1) { [0]=> string(12) "1431693070:1" } ["_thumbnail_id"]=> array(1) { [0]=> string(2) "93" } ["tarif"]=> array(1) { [0]=> string(7) "125 €" } }


La key tarif est bien déclarée.

Quand je repasse avec le shortcode, j'essaie de mettre
$output .= '<p style="text-align: center; font-size:25px; line-height:35px; margin:20px 0 0 0">A partir de<br /> <span class="apartirde">' . var_dump(get_post_meta($post->ID, 'tarif', true) . '</span></p>';

Mais le tarif ne s'affiche toujours pas. Pour le reste tout est ok.

Si je mets ' . var_dump(get_post_meta($post->ID)) . ' rien ne se passe non plus en front.


Merci pour ton aide, car là je galère grave ! Smiley cligne merci
Tu as raison, le codex m'a permis de trouver !!

J'ai remplacer

' . get_post_meta(get_the_ID(), 'tarif', true) . '


' . get_post_meta($post->ID, 'tarif', true) . '


Et ca fonctionne youpi !!!
Nickel et bien joué !

C'est vrai que $post->ID n'affiche pas la variable dans une fonction, elle n'est pas globale et n'est valable que dans la boucle principale de WP...