web-dev-qa-db-fra.com

PHP Normes de codage, widgets et assainissement

J'ai un problème avec les widgets personnalisés et les normes de codage WordPress. Lorsque vous créez un widget personnalisé, votre classe doit avoir une méthode "widget" qui affiche le widget. Quelque chose comme:

<?php
public function widget( $args, $instance ) {
    echo $args['before_widget'];
    ?> <span><?php echo esc_html( 'Great widget', 'text-domain' ); ?></span> <?php
    echo $args['after_widget'];
}
?>

Bien que cela fonctionne parfaitement, cela ne passera pas PHP tests de renifleur de code avec les normes de codage WordPress, car $args['after_widget']; et $args['before_widget']; ne sont pas ignorés ...

Qu'est-ce que je fais mal?

1
guillaume.molter

Ces arguments contiennent du code HTML arbitraire et ne peuvent pas être échappés correctement. Ceci est essentiellement une limitation de la façon dont le code des widgets a été conçu et vous pouvez voir dans les classes de widgets de base qu'aucune échappement n'est effectuée sur celles-ci.

Leçons à apprendre:

  • WP core n'adhère pas systématiquement à ses propres normes de codage (et y parvenir ne constitue pas un effort ciblé digne d'un effort ciblé);
  • passer des morceaux de HTML est une mauvaise idée, dans votre propre code transmettre data et restituer de manière appropriée avec un échappement correct.
4
Rarst

Ceci est un problème avec des normes de codage trop strictes, pas avec la façon dont vous devriez écrire du code wordpress. Dans ce contexte, les deux paramètres sont supposés être du code HTML valide (ils sont définis dans le temps d'enregistrement de la barre latérale).

Quoi qu’il en soit, dans la plupart des outils comme celui-là, il existe un moyen de demander au linter/renifleur d’ignorer cette ligne ou cette fonction.

BTW les normes dont vous parlez sont probablement les normes wordpress.com VIP, pas les normes wordpress - https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/

3
Mark Kaplun