我正在使用Advanced Custom Fields plugin, 这很好。
我试图获取我创建的一个字段的输出,并对其进行“永久对齐处理”,即去掉斜杠等非字母数字字符,将大写转换为小写,并将空格转换为破折号。
具体来说,我想用checkbox字段来实现这一点。我想这样做,因为我想使用输出的值作为css类名。
它的输出由这一位PHP调用(从documented use, 参见示例#4):
<?php
$values = get_field(\'field_name\');
if($values)
{
foreach($values as $value)
{
echo \' \' . $value;
}
}
?>
返回由空格分隔的所有复选框值(本例中为5-10)。我成功地将这些值显示为类名,但现在我需要一种方法来格式化它们,使其实际用作类名。
我该如何调整它才能工作?我发现这一点似乎适用于sinlge字符串:
function stripJunk($string){
$string = str_replace(" ","-", trim($string));
$string = preg_replace("/[^a-zA-Z0-9-]/","", $string);
$string = strtolower($string);
return $string;}
但在我的例子中,它是一个数组,我不知道如何使用它。谈到PHP,我一文不值,除了能够稍微调整一下而不破坏它。
最合适的回答,由SO网友:fuxia 整理而成
你可以使用sanitize_html_class()
或sanitize_title_with_dashes()
. 这两个函数的作用几乎相同。但请注意much more 字符在CSS类名中有效。
示例:✂ ✉ ✔✽ ✾ ✿ ❀ ❉ ❤ ❦ ☂ ☔ ☎ ☘ ♫ ♻ ⚥
更新我建议将代码封装在prefixed 函数以避免与使用相同名称编写的插件发生冲突。
示例(未测试):
function wpse_48986_custom_fields_to_classes( $field_name )
{
$values = get_field( $field_name );
if ( is_string( $values ) )
{
return trim( sanitize_html_class( $values ) );
}
if ( is_array( $values ) )
{
// Prepare the array values.
$values = array_map( \'sanitize_html_class\', $values );
$values = array_map( \'trim\', $values );
return implode( \' \', $values );
}
// We didn\'t get a string or an array.
return \'\';
}
当您需要CSS类时,只需编写:
print wpse_48986_custom_fields_to_classes( \'field_name\' );
我无法测试代码:我没有安装插件,我的主计算机坏了,所以可能会有错误。请随意编辑此帖子并修复损坏的代码。:)