web-dev-qa-db-fra.com

Meta description - code de modèle pour obtenir la description de la catégorie

Vous trouverez ci-dessous le code que j'ai écrit pour header.php afin que la description d'une catégorie de produits puisse être obtenue et utilisée pour la balise <meta> description lors de l'affichage d'une telle "page" sur le site.

Existe-t-il une méthode plus "WordPress" pour faire cela, telle qu'une fonction que je devrais utiliser au lieu de référencer la propriété description de l'objet renvoyé par get_queried_obj()? Au départ, je voulais utiliser term_description() mais cela ajoute des balises <p> afin que je ne finisse pas par emprunter cette voie (je sais que je pourrais les supprimer avec une fonction intégrée mais cela ne semble pas être une bonne pratique).

Le bloc elseif ci-dessous est l'élément clé du code:

<?php
if (is_single() || is_page()) {
    $description = get_post_meta(get_the_ID(), 'description', true);
} elseif (is_tax()) {
    //Product categories
    $obj_temp = get_queried_object();
    $description = $obj_temp->description;
} else {
    $description = get_bloginfo('description');
} 
if (trim($description) !== '') {
    ?>
    <meta name="description" content="<?php echo htmlspecialchars($description); ?>" />
    <?php
}
?>
1
g491

Existe-t-il une autre "méthode WordPress" pour le faire ...

Je ne sais pas vraiment ce que vous entendez par une manière plus WordPress, mais en général, la façon dont vous obtenez la description du terme est un moyen plus fiable de le faire. De cette façon, vous n'avez pas besoin d'accéder au $post global utilisé par tant de gens. Juste pour des raisons d’intérêt, veuillez consulter mon message ici sur la raison pour laquelle éviter le $post global

Je voudrais cependant obtenir l’objet demandé du $GLOBALS['wp_the_query']->get_queried_object() qui est encore plus fiable que get_queried_object(), puis le transmettre get_term() pour appliquer le terme filtres au terme

} elseif ( is_tax() ) {
    //Product categories
    $obj_temp    = get_term( $GLOBALS['wp_the_query']->get_queried_object() );
    $description = $obj_temp->description;
}

Un autre moyen probable consiste à extraire le terme slug et taxonomy de l'URL, puis l'objet complet term pour obtenir la description.

} elseif ( is_tax() ) {
    //Product categories
    $obj_temp    = get_term_by( 'slug', get_query_var('term'), get_query_var('taxonomy') );
    $description = $obj_temp->description;
}        

EDIT - des commentaires

Comment $GLOBALS['wp_the_query']->get_queried_object() est-il plus fiable que get_queried_object()

Nous avons eu une discussion à ce sujet qui a conduit à ma réponse à la question suivante

Vous devriez vraiment lire cela car j'ai tout expliqué en détail ici. Juste une preuve de concept rapide à ajouter à cette réponse dans ce contexte, dans n'importe quel modèle, de préférence un modèle de page ou de taxonomie, exécutez la procédure suivante et affichez les résultats.

var_dump( $GLOBALS['wp_the_query']->get_queried_object() );
var_dump( get_queried_object() );

query_posts( 's=crap' );


var_dump( $GLOBALS['wp_the_query']->get_queried_object() );
var_dump( get_queried_object() );

En outre, quelle est la situation indésirable qui pourrait survenir si le terme filtres n’appliquait pas au terme

Les données à terme ne sont pas désinfectées, spécialement lorsqu'elles sont utilisées directement à partir d'un super global. Elles peuvent donc contenir du code malveillant injecté ou des URL piratées vers un site pornographique hardcore dont vous ne voulez pas. L'application des filtres de terme désinfecte les données en fonction du champ de terme pour les sauvegarder.

Désinfecter, valider et échapper des données devrait être une habitude et non un extra discutable. Les pirates aiment les données non assainies et non validées, ils peuvent injecter n'importe quel code malveillant dans votre site et ainsi accéder à votre site. Le meilleur conseil que je puisse vous donner pour toujours est de toujours assainir, valider et évacuer toutes les données en fonction du type de données, quelle que soit leur origine (, même si elles proviennent de vous-même ) ou pour quoi il sera utilisé. De cette façon, il est extrêmement difficile pour les pirates informatiques de pirater votre site.

1
Pieter Goosen