Extraire une donnée de la BDD et l’utiliser en valeur méta

  • WordPress :4.9.9
  • Statut : hors support
8 sujets de 1 à 8 (sur un total de 8)
  • Auteur
    Messages
  • #2208643
    spip93
    Participant
    Padawan WordPress
    53 contributions

    Bonjour,

    Ma configuration WP actuelle

    • Version de PHP/MySQL : 7.0.30/5.5.60
    • Thème utilisé : Storycle
    • Extensions en place :
      • Advanced Custom Fields PRO Version 5.7.5
      • Better Recent Comments Version 1.0.5
      • Cherry Live Demo Mods Switcher Version 1.1
      • Cherry PopUps Version 1.1.6
      • Cherry Socialize Version 1.1.3
      • Cherry Trending Posts Version 1.0.1
      • Elementor Version 2.2.2
      • GA Google Analytics Version 20180828
      • Highlight and Share Version 2.4.1
      • JetBlocks For Elementor Version 1.1.1
      • JetBlog For Elementor Version 2.1.6
      • Jet Data Importer Version 1.0.1
      • Jet Elements For Elementor Version 1.12.2
      • JetMenu Version 1.5.0
      • Jet Plugins Wizard Version 1.1.0
      • JetReviews For Elementor Version 1.1.2
      • Jet Tabs For Elementor Version 1.1.3
      • JetThemeCore Version 1.0.5
      • Jet Tricks Version 1.1.1
      • Loco Translate Version 2.1.5
      • Table of Contents Plus Version 1601
      • TM Style Switcher Version 1.0.4
      • WordPress Importer Version 0.6.4
      • WordPress Social Login Version 2.3.3
      • WPS Hide Login Version 1.4.3
    • Nom de l’hébergeur : 1&1
    • Adresse du site : http://www.tootuto.fr

    Problème(s) rencontré(s) :

    Bonjour à tous et à toutes,

    J’ai un site Internet où les utilisateurs peuvent donner une note aux articles sous forme d’étoiles de 0 à 5. Sur la page de l’article, cette note apparait en haut sous forme de méta à côté d’autres (comme la date, le nom de l’auteur, le nombre de vues, le nombre de commentaires …)

    Sur ma page d’accueil, j’ai une sorte de diaporama à 3 tuiles (1 grande et 2 petites) qui reprend les derniers articles. Sur chaque tuile, j’ai :

    • L’image en avant en fond
    • Le titre de l’article
    • Un résumé
    • 3 métas :
      • L’auteur
      • La date de publication
      • Le nombre de commentaires

    Je voudrais rajouter la note de chaque article à côté des 3 métas citées précédemment. Pour cela, j’ai trouvé la ligne de code permettant de l’afficher sur la page article (située dans le fichier content.php)

    storycle_get_template_part( 'template-parts/post/post-meta/meta-rating' );

    Je l’ai copié dans le fichier où sont appelées les 3 autres métas (le fichier jet-blog-smart-tiles.php)

    (Je vais essayer de faire court) J’ai maintenant la notation de chaque article sur la page d’accueil à côté des 3 autres métas. Le problème, c’est que c’est affiché de cette façon (par exemple) :

    * * * * * 4 sur (1 note)

    (Avec une étoile à chaque *) Mais ça prend trop de place et je voudrais que ce soit affiché de cette façon :

    * 4

    J’ai trouvé où la note de l’article était stockée dans la base de données, mais je ne sais pas comment récupérer cette donnée (en fonction de l’article), l’insérer dans mon code pour qu’elle soit affichée comme je le souhaite.

    Voici les informations dont je dispose :

    La table où est cette donnée (cette note) est : xxxxxxxxpostmeta (avec un préfixe à la place de xxxxxxxx)

    Dans cette table, j’ai 4 champs :

    • meta_id : clé primaire unique
    • post_id : variable en fonction de l’ID de l’article
    • meta_key : (toujours) cherry_trend_rating_rate
    • meta_value : note attribuée à l’article

    (Etant une quiche en programmation PHP) Que dois-je écrire comme lignes de code et où les placer pour afficher ce que je souhaite (Par exemple : * 4) ?

    Pouvez-vous également SVP m’expliquer pourquoi vous écrivez telle ou telle ligne de code ? Parce que j’aime bien comprendre pour faire tout seul par la suite.

    Un grand merci par avance pour votre aide.

    Bonne journée 😉

    #2208769
    CAMEO172
    Participant
    Maître WordPress
    1395 contributions

    Si cette donnée est dans xxx_postmeta, alors c’est déjà une bonne chose.

    Il faut utiliser la fonction get_post_meta pour récupérer la donnée https://developer.wordpress.org/reference/functions/get_post_meta/

    Pour votre cas :

    get_post_meta($post->ID, cherry_trend_rating_rate, true) devrait suffire pour récupérer meta_value

    je fais ça de partout sur mon propre site

     

    #2208782
    spip93
    Participant
    Padawan WordPress
    53 contributions

    Merci beaucoup Cameo172.

    J’ai inséré votre ligne de code, mais ça n’affiche pas la note pour autant.

    Voici la section où j’insère le code dans le fichier

    /**
    	 * Retrieves meta settings ad required data.
    	 *
    	 * @return array
    	 */
    	public function __get_meta() {
    
    		$settings = $this->get_settings();
    
    		$show = array(
    			'author'   => 'show_author',
    			'date'     => 'show_date',
    			'comments' => 'show_comments',
    		);
    
    		$html = array(
    			'author' => '<span class="posted-by post-meta__item jet-smart-tiles__meta-item">%1$s<span %3$s %4$s>%5$s%6$s</span></span>',
    			'date' => '<span class="post__date post-meta__item jet-smart-tiles__meta-item">%1$s<span %3$s %4$s ><time datetime="%5$s" title="%5$s">%6$s%7$s</time></span></span>',
    			'comments' => '<span class="post__comments post-meta__item jet-smart-tiles__meta-item">%1$s<span %3$s %4$s>%5$s%6$s</span></span>',
                get_post_meta($post->ID, cherry_trend_rating_rate, true),
    		);
    
    		$icon_format = '<i class="jet-smart-tiles__meta-icon %s"></i>';
    		$result      = array();
    
    		foreach ( $show as $key => $setting ) {
    
    			$prefix = ( ! empty( $settings[ $setting . '_icon' ] ) ) ? sprintf( $icon_format, $settings[ $setting . '_icon' ] ) : '';
    
    			$current_html = $html[ $key ];
    
    			$current = array(
    				'visible' => $settings[ $setting ],
    				'prefix'  => $prefix,
    				'html'    => $current_html,
    			);
    
    			$result[ $key ] = $current;
    
    		}
    
    		return $result;
    
    	}

    Comment faire pour afficher la valeur récupérée dans la BDD (en l’occurrence, la note de l’article) ?

    Merci pour votre réponse 😉

     

    #2208808
    CAMEO172
    Participant
    Maître WordPress
    1395 contributions

    je suis probablement d’un niveau plus petit que vous en PHP. testez déjà votre récupération à part avant de l’inclure dans votre fonction.

    ou alors ce n’est pas une meta et là je ne sais pas faire.

    #2208996
    spip93
    Participant
    Padawan WordPress
    53 contributions

    Ayé, j’ai (en partie) trouvé !!

    Voici le 1er code que j’ai entré :

    $post_rate = get_post_meta( get_the_ID(), cherry_trend_rating_rate, true );
    echo $post_rate;

    La première ligne de ce code ressemble beaucoup au code que vous m’avez donné Cameo172, merci 😉

    Cependant, j’ai eu un petit problème : quand un article n’était pas noté, il n’y a pas de clé cherry_trend_rating_rate associé à l’ID de l’article dans la BDD.

    J’ai donc fait un if/else où je demande d’afficher la variable $post_rate (autrement dit la note de l’article) si la clé cherry_trend_rating_rate existe, sinon d’afficher 0. Avec l’icône en forme d’étoile devant, ça donne ça comme code :

    $post_rate = get_post_meta( get_the_ID(), cherry_trend_rating_rate, true );
    
    $search_array = array(cherry_trend_rating_rate);
    if (array_key_exists(cherry_trend_rating_rate, $search_array)) {
        echo '<span class="posted-by post-meta__item jet-smart-tiles__meta-item">' .'<i class="jet-smart-tiles__meta-icon fa fa-star"></i>'. $post_rate .'</span>';
    }
    else
    echo '<span class="posted-by post-meta__item jet-smart-tiles__meta-item">' .'<i class="jet-smart-tiles__meta-icon fa fa-star"></i>'. 0 .'</span>';

    Problème : qu’un article soit noté ou non, ça m’affiche 0

    Quelqu’un aurait une idée SVP ?

    • Cette réponse a été modifiée le il y a 1 année et 2 mois par spip93.
    • Cette réponse a été modifiée le il y a 1 année et 2 mois par spip93.
    #2209001
    CAMEO172
    Participant
    Maître WordPress
    1395 contributions

    Bonsoir,

    vous aimez la complication. Perso je ne vois pas l’intérêt de passer par un array.

    Je ferais tout simplement :

    $post_rate = get_post_meta( get_the_ID(), cherry_trend_rating_rate, true );

    if ($post_rate <>’ ‘)  {-> yahoo j’ai une note et je vais l’afficher ce satané $post_rate}

    else {-> pas de note !}

    c’est ce que je fais sur mon site et ma foi ça marche nickel. Attention : il n’y a pas d’espace entre les ‘ . j’ai pas le choix pour le formatage de la réponse.

     

    P.S : pardon pour $post->ID. ça ne doit pas marcher quand on est pas sur une page single. je présume que $post n’est pas défini

     

     

     

    • Cette réponse a été modifiée le il y a 1 année et 2 mois par CAMEO172.
    • Cette réponse a été modifiée le il y a 1 année et 2 mois par CAMEO172.
    • Cette réponse a été modifiée le il y a 1 année et 2 mois par CAMEO172.
    #2209005
    CAMEO172
    Participant
    Maître WordPress
    1395 contributions

    Je vous donne une idée de code supplémentaire. cela peut vous intéresser, sait on jamais.

    testez dans la boucle où il y a un $post_rate :

    $post_rate_minus = floor($post_rate);
    $compteetoile =0;
    for ($i=1; $i<=$post_rate_minus; $i++) {
    echo ‘<i class=”fa fa-star fa-lg” aria-hidden=”true”></i>’;}
    if ($post_rate-$post_rate_minus==’0.5′)
    { echo ‘<i class=”fa fa-star-half-o fa-lg” aria-hidden=”true”></i>’;$compteetoile =1;}
    for ($i=1; $i<=6-$post_rate_minus-$compteetoile; $i++) {
    echo ‘<i class=”fa fa-star-o fa-lg” aria-hidden=”true”></i>’;}

    vous pouvez ainsi avoir votre note sans chiffre, rien qu’avec des étoiles plus ou moins pleine. Suffit alors d’adapter la taille pour que ça passe dans vos tuiles.attention le 6 de la dernière boucle est là parce que ma notation est sur 6. c’est à adapter pour vous.

    • Cette réponse a été modifiée le il y a 1 année et 2 mois par CAMEO172.
    #2209812
    spip93
    Participant
    Padawan WordPress
    53 contributions

    Bonjour Cameo172,

    Désolé, je viens seulement de voir/lire vos réponses :-/

    Si ça vous intéresse (tous), voici le code (qui fonctionne) et qu’on m’a donné sur un autre forum :

    $post_rate = get_post_meta( get_the_ID(), cherry_trend_rating_rate, true );
     
    $post_rate = ($post_rate)?$post_rate:0;
     
        echo '<span class="posted-by post-meta__item jet-smart-tiles__meta-item">' .'<i class="jet-smart-tiles__meta-icon fa fa-star"></i>'. $post_rate .'</span>';

    (Sans vouloir vous vexer Cameo172) Ça semble plus simple, mais un grand grand merci pour vos réponses Cameo172 😉

    Bonne journée à vous 😉

8 sujets de 1 à 8 (sur un total de 8)
  • Vous devez être connecté pour répondre à ce sujet.