我为我的插件制作了一个自定义的解析函数,这个函数非常好用。我只是有点小问题!
以下是我的功能:
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.(所以单词的大小写保持原样!)
我使用了不区分大小写的函数,但我的函数将所有单词的第一个字母改为大写,因为这些词是这样的。但如果我在术语中使用小写,则会将所有内容都改为小写。
所以我需要帮助。
非常感谢你^^
雅恩
最合适的回答,由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”(在任何情况下)的所有实例,并用强标记将它们包装起来,使字母的大小写保持不变。您可以使用链接标记执行类似操作