将输出上的短码值大写

时间:2014-06-21 作者:Jon

我编写此短代码是为了获取我指定的文件名,并将其输出为带有title和alt标记的图像:

function cwc_pkmn($atts) {
    extract(shortcode_atts(array(
        "name" => \'http://\',
    ), $atts));
    return \'<img src="/path/to/file/\'.$name.\'.png" alt="\'.$name.\'" title="\'.$name.\'" />\';
}
add_shortcode("pkmn", "cwc_pkmn");
我所有的文件名都是小写的,单词之间有一个“-”。是否可以让输出将a后面的每个字母大写,并用空格替换?所以现在,当我这样做上面的短代码时:

[pkmn name="mr.-deeds"]
我将此作为输出:

<img src="/path/to/file/mr.-deeds.png" alt="mr.-deeds" title="mr.-deeds">
但是,是否可以让输出使用title和alt标记来执行此操作

<img src="/path/to/file/mr.-deeds.png" alt="Mr. Deeds" title="Mr. Deeds">
非常感谢你!

2 个回复
最合适的回答,由SO网友:Vasu Chawla 整理而成

Try this out. . .

function cwc_pkmn( $atts = array(), $content = \'\' )
{
    // ------------------------
    // Settings:
    $path     = \'/path/to/file/\';
    $ext      = \'png\';
    // ------------------------

    // Shortcode input:
    $atts = shortcode_atts(
        array( \'name\' => \'\' ),
        $atts,
        \'pkmn_shortcode\'
    );

    // Sanitize input:
    $name          =  esc_attr( $atts[\'name\'] );

    // Init:
    $words_ucfirst = array();

    // Capitalize the first letter in each word:
    $words         = explode( \'-\', $name );

    foreach( $words as $word )
    {
        $words_ucfirst[] =  ucfirst( $word );
    }

    $name_mod = esc_attr( join( \' \', $words_ucfirst ) );

    return sprintf( \'<img src="%s%s.%s" alt="%s" title="%s" />\',
        $path,
        $name,
        $ext,
        $name_mod,
        $name_mod
    );
}

add_shortcode( \'pkmn\', \'cwc_pkmn\' );
SO网友:engelen

您可以使用preg_replace_callback 为了这个。它使用正则表达式替换字符串的一部分。使用正则表达式“-[a-z]”匹配一个破折号后跟一个小写字母。在[a-z]周围添加括号,可以在替换函数中使用它(function( $matches )) 允许我们在$matches. 函数的返回值用于替换匹配的字符串。这样,我们将-[a-z]替换为一个空格,后跟之前是小写的大写字母。

$title = preg_replace_callback( \'/\\-([a-z])/\', function( $matches ) {
    return \' \' . strtoupper( $matches[1] );
}, $name );

结束

相关推荐

Dynamic CSS through PHP issue

我试图创造一种动态风格。php样式表。我正在测试的最基本功能是主题选项上的颜色选择器。颜色选择器可以工作,但我的动态css文件不能工作。在Chrome上,我检查导航元素时收到“非法字符串偏移”错误。我可以确认它正在识别和回显字符串,但不是值。我的动态css文件:<?php $absolute_path = explode(\'wp-content\', $_SERVER[\'SCRIPT_FILENAME\']); $wp_load = $absolute_path[0] .