私はそれにHTMLコードを持つ変数にエスケープ関数を使用する方法を少し混乱しています。私はこれを試しました https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data しかし私はそれを理解することができませんでした。これが私のコードです:
$output = '<p>';
$output .= '<label for="' . esc_attr( $this->get_field_id( 'title' ) ) . '">Title:</label>';
$output .= '<input type="text" class="widefat" id="' . esc_attr( $this->get_field_id( 'title' ) ) . '" name="' . esc_attr( $this->get_field_name( 'title' ) ) . '" value="' . esc_attr( $title ) . '"';
$output .= '</p>';
echo $output;
私の質問は、HTMLを失うことなく$ outputをエスケープする方法を教えてください。私はthemeforestにこのコードを提出しているので私は尋ねています。そこから私はコードをエスケープしていないために数回拒否されました。だから今私はそれがそこに変数をエスケープする方が良いと思います。書きます?ありがとうございました!
あなたがそれを "WordPressの方法"でやりたいのであれば、あなたはあなたのHTMLを一時的な変数に格納しないでしょう、あなたは直接出力するでしょう。
?>
<p>
<label for="<?php esc_attr_e( $this->get_field_id( 'title' ) ); ?>"> <?php _e('Title:', 'tex-domain'); ?></label>
<input type="text" class="widefat" id="<?php esc_attr_e( $this->get_field_id( 'title' ) ); ?>" value="<?php esc_attr_e( $title ); ?>" />
</p>
<?php
P.S:あなたも 国際化 あなたのテキスト文字列。
あなたはwp_kses()
を探しています。 https://codex.wordpress.org/Function_Reference/wp_kses
wp_kses_post()
やwp_kses_data()
のようなより多くのヘルパー関数があります
あなたのコードは私のために見えそしてうまく働きます。 value
のHTMLは保存されます。
私の唯一の推薦は__()
か_e()
であなたのすべてのテキスト文字列を包むことであるのでそれらは簡単に翻訳されることができます。 ThemeForestのようなマーケットプレイスのサイトでは、誰もが英語を使いたくないので、これは素晴らしいセールスポイントです。
$output .= '<label for="' . esc_attr( $tid ) . '">' . __( 'Title:', 'your-text-domain' ) . '</label>';
WordPress Codexで 国際化についてもっと読む 。
1.エスケープ
エスケープ属性<label for="<?php esc_attr( $tid ); ?>">
HTMLのエスケープ<label ..><?php esc_html( 'Text' ); ?></label>
2.翻訳とエスケープ
注意:
textdomain
はあなた自身のユニークなテーマ/プラグインスラッグであるべきです。
1。属性をエスケープして変換する:<label for="<?php esc_attr( $tid ); ?>">
翻訳の準備をする必要はありません。もしあなたが$tid
を持つ静的な文字列を持っているなら、あなたはそれをトランジションの準備ができているようにする必要があります。
無効:
<label for="<?php esc_attr__( $tid, 'textdomain' ) ); ?>">
<label for="<?php printf( esc_attr__( '%s', 'textdomain' ), $tid ); ?>">
有効:
<label for="<?php printf( esc_attr__( '%s static text', 'textdomain' ), $tid ); ?>">
<label ..><?php esc_html__( 'Text', 'textdomain' ); ?></label>