Стандарты кодирования PHP, виджеты и санитария

У меня проблема с пользовательскими виджетами и стандартами кодирования WordPress. Когда вы создаете собственный виджет, ваш класс должен иметь метод «виджета», который отображает виджет. Что-то вроде:

<?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']; } ?> 

Хотя это совершенно функционально, это не будет проходить тесты PHP-анализатора с помощью стандартов кодирования WordPress, поскольку $args['after_widget']; и $args['before_widget']; не сбежали …

Что я делаю не так?

Solutions Collecting From Web of "Стандарты кодирования PHP, виджеты и санитария"

Эти аргументы содержат произвольный HTML и не могут быть надлежащим образом экранированы. Это, по сути, ограничение на то, как был разработан код Widgets, и вы можете видеть в основных классах Widget, что на них не выполняется.

Уроки для изучения:

  • Ядро WP не последовательно придерживается своих собственных стандартов кодирования (и получение там не считается целевым усилием);
  • прохождение вокруг кусков HTML – это плохая идея, в вашем собственном коде прохождение данных и рендеринг соответствующим образом с правильным экранированием.

Это проблема с чрезмерно строгими стандартами кодирования, а не с тем, как писать код WordPress. В этом контексте оба параметра считаются допустимыми HTML (они определены во время регистрации боковой панели).

В любом случае в большинстве таких инструментов есть способ проинструктировать linter / sniffer игнорировать эту строку или функцию.

Кстати, стандарты, о которых вы говорите, вероятно, являются VIP-стандартами wordpress.com, а не wordpress one – https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/