如何在此上下文中剥离非字母数字字符、将空格转换为破折号、将大写转换为小写

时间:2012-04-14 作者:Gabriel Luethje

我正在使用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,我一文不值,除了能够稍微调整一下而不破坏它。

1 个回复
最合适的回答,由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\' );
我无法测试代码:我没有安装插件,我的主计算机坏了,所以可能会有错误。请随意编辑此帖子并修复损坏的代码。:)

结束

相关推荐

如何在Archive.php中显示用户的状态(在线-离线)

我正在使用代码用户状态How to check if a user (not current user) is logged in?. 在作者的个人资料页面上,效果很好(谢谢大家)。但如果我把它放在文章底部的存档页上,它就不起作用了functions.php add_action(\'wp\', \'update_online_users_status\'); function update_online_users_status(){ if(is_user_logge