it-swarm-ja.com

WPコーディング標準-避けられないものからの脱出?

これらの2つの例をどのようにエスケープしますか? wc_price()は、エスケープ済みの$product_pricepおよびspanタグで通貨記号で囲みます。

$product_price = $product->get_price();

<p><?php echo wc_price( esc_html( $product_price ) ); ?></p>

次のものは、srcsrcsetaltなどのすべての属性を持つ完全なイメージを出力します。

$product_img = $product->get_image();

<?php echo $product_img; ?>
1
Bonovski

最初の例では、多くの人が wp_kses_post を使用して、ラッパー関数からの基本的なHTML出力を処理します。 wp_kses を使用するいくつかの基本的な属性とタグのショートカットです。この関数を使用して、2番目の例で通過できる許可されたタグと属性を指定できます。

1
Tim Elsass

私の意見では、そうはしないでしょう。 wc_price()$product->get_image()は、どちらも上流でエスケープされています。 PHPCSのWordPress Coding Standards sniffsでは、これらは「自動エスケープ関数」と呼ばれます。

コードスニッフィングを満たすために、すでにエスケープされたすべてのものにwp_kses_post()を置くことによるダブルエスケープは、リソースの浪費であり、スニッフィングが最初に解決するはずの問題を解決するために実際には何もしません。

PHPCSがエスケープされているにもかかわらずこれらの行にフラグを設定する理由は、WPコーディング標準がサードパーティの関数を認識していないためです。プロジェクトがそれらを使用している場合、または独自の自動機能がある場合関数をエスケープする場合は、プロジェクトのルールを構成してそれらをカバーする必要があります。たとえば、これをプロジェクトに追加すると、_phpcs.xml_ファイルを使用すると、PHPCSはwc_price()が使用されている場所でエスケープされないというエラーを表示しなくなります。

_<rule ref="WordPress.Security.EscapeOutput">
    <properties>
        <property name="customAutoEscapedFunctions" type="array" value="wc_price,"/>
    </properties>
</rule>
_

customAutoEscapedFunctionsはクラスメソッドをサポートしていないため、$product->get_image();を満たすにはインラインコメントを使用します。

_$product_img = $product->get_image();

echo $product_img; // phpcs:ignore WordPress.Security.EscapeOutput 
_
1
Jacob Peattie