web-dev-qa-db-ja.com

PHP コーディング標準、ウィジェット、およびサニタイズ

カスタムウィジェットとWordPress Coding Standardsに問題があります。カスタムウィジェットを作成するとき、あなたのクラスはそのウィジェットを表示する "widget"メソッドを持つべきです。何かのようなもの:

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

これは完全に機能的ですが、$args['after_widget'];$args['before_widget'];はエスケープされていないので、これはWordPressコーディング標準でのPHP code snifferテストに合格しません...

何がおかしいのですか?

1

これらの引数は任意のHTMLを含み、適切にエスケープすることはできません。これは本質的にウィジェットコードがどのように設計されたかに対する制限であり、あなたはこれらがエスケープされていないことをコアWidgetクラスで見ることができます。

学ぶべき教訓:

  • WPコアは、独自のコーディング標準に一貫して準拠していません(そしてそれを実現することは、目標を絞った努力に値するとは見なされていません)。
  • あなた自身のコードでデータを渡し、適切なエスケープを使って適切にレンダリングすることで、HTMLの塊の周りを渡すのは悪い考えです。
4
Rarst

これは、ワードプレスコードの書き方ではなく、過度に厳格なコーディング標準の問題です。これに関連して、両方のパラメータは有効なHTMLであると見なされます(それらはサイドバー登録時に定義されます)。

とにかくそのようなほとんどのツールでその行または機能を無視するようにlinter/snifferに指示する方法があります。

ところであなたが話している標準はおそらくwordpress.com VIP標準であり、wordpressの標準ではない - https://make.wordpress.org/core/handbook/ベストプラクティス/コーディング標準/ php /

3
Mark Kaplun