如何在不更改WordPress中的字符大小写(大小写)的情况下进行解析?

时间:2012-01-22 作者:Kitefr

我为我的插件制作了一个自定义的解析函数,这个函数非常好用。我只是有点小问题!

以下是我的功能:

public function ys_glossary_parse( $text )
    {
        // Get all the items in the database
        $terms = $this->get_all_termes();

        // Get the id of the glossary page
        $glossary_page_id = get_option(\'ys_glossary_PageID\');
        if(!$glossary_page_id OR $glossary_page_id == 0)
        {
            return $this->admin_message(\'You don\\\'t have a Glossary page yet. Go in the option page !\');
        }

        // Get the permalink of the page
        $permalink = get_permalink($glossary_page_id);

        $text_to_link    = apply_filters( \'ys_glossary_text\', $terms );

        //$preg_flags      = $case_sensitive ? \'s\' : \'si\'; // TODO: add an option for that
        $preg_flags      = \'si\';

        $text = \' \' . $text . \' \';
        if ( ! empty( $text_to_link ) ) {
            foreach ( $text_to_link as $old_text ) {

                // TODO: modify this to use the upper/lower case of each words without modifying them

                $new_text = \'<a href="\' . esc_url( $permalink ) . \'#\'.$old_text.\'" title="Lien vers la definition" target="_blank" >\' . $old_text . \'</a>\';
                $new_text = apply_filters( \'ys_glossary_text_linked_text\', $new_text, $old_text, $permalink );
                $text = preg_replace( "|(?!<.*?)\\b$old_text\\b(?![^<>]*?>)|$preg_flags", $new_text, $text );
            }
            // Remove links within links
            $text = preg_replace( "#(<a [^>]+>)(.*)<a [^>]+>([^<]*)</a>([^>]*)</a>#iU", "$1$2$3$4</a>" , $text );
        }
        return trim( $text );
    }
$术语是一个简单的数组,如:

array(
[0] => \'item1\', 
[1] => \'item2\', 
[2] => \'item3\'
); 
(它们的第一个字母为大写)。

我想要的是:

如何在不改变单词大小写的情况下建立单词链接?Blocking 将作为Blocking 但是blocking 将是blocking.(所以单词的大小写保持原样!)

我使用了不区分大小写的函数,但我的函数将所有单词的第一个字母改为大写,因为这些词是这样的。但如果我在术语中使用小写,则会将所有内容都改为小写。

所以我需要帮助。

非常感谢你^^

雅恩

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

Kitefr,(这不是一个真正的WordPress问题,而是一个php问题),但您可以使用preg_replace_callback, 您可以在其中定义自己的函数来处理替换。

例如,

    $text = "The quick brown fox jumped over the Quick dog.";
    $text = preg_replace_callback( "/quick/si", \'my_replace\' , $text );
    function my_replace($matches){
         return \'<strong>\'.$matches[0].\'</strong>\';
    }
这将替换“quick”(在任何情况下)的所有实例,并用强标记将它们包装起来,使字母的大小写保持不变。您可以使用链接标记执行类似操作

结束

相关推荐