清理 get_field() 输出
清理 get_field()
输出是个好主意,尤其是在使用高级自定义字段字段前端(使用 acf_form()
)时。否则,你的站点可能容易受到跨站点脚本攻击(XSS)的攻击。
以下功能可让你使用
echo get_field_escaped('my_custom_field', $post_id, true);
代替
echo get_field('my_custom_field', $post_id, true);
该函数使用 esc_html 作为默认值,但让我们将其更改为第四个参数
echo get_field_escaped('url', $post_id, true, 'esc_url');
将以下内容添加到 functions.php
以启用该功能:
/**
* Helper function to get escaped field from ACF
* and also normalize values.
*
* @param $field_key
* @param bool $post_id
* @param bool $format_value
* @param string $escape_method esc_html / esc_attr or NULL for none
* @return array|bool|string
*/
function get_field_escaped($field_key, $post_id = false, $format_value = true, $escape_method = 'esc_html')
{
$field = get_field($field_key, $post_id, $format_value);
/* Check for null and falsy values and always return space */
if($field === NULL || $field === FALSE)
$field = '';
/* Handle arrays */
if(is_array($field))
{
$field_escaped = array();
foreach($field as $key => $value)
{
$field_escaped[$key] = ($escape_method === NULL) ? $value : $escape_method($value);
}
return $field_escaped;
}
else
return ($escape_method === NULL) ? $field : $escape_method($field);
}
资料来源: https : //snippets.khromov.se/sanitizing-and-securing-advanced-custom-fields-output/
有关 WordPress Codex 中不同清理选项的更多信息: https : //codex.wordpress.org/Data_Validation#Output_Sanitization