清理 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