インストール:preg_replace_callbackエラー
function add_glossary_links($content) {
global $wpdb, $wordlist;
if (!$wordlist && !$wordlist = get_option('wordlist')) {
mysql_query('SET SESSION group_concat_max_len = 100000');
$wordlist = $wpdb->get_var('SELECT GROUP_CONCAT(DISTINCT post_title SEPARATOR "|") AS list FROM '.$wpdb->posts.' WHERE post_status="publish" AND post_type="glossary" AND post_parent>0');
add_option('wordlist', $wordlist);
}
$wordlist = str_replace(array(" ", "'", "."), array("\s", "\'", "\."), $wordlist);
echo $wordlist;
$content = preg_replace_callback(
'/\b('.$wordlist.')\b/i',
create_function(
'$matches',
'return "<a href=\"/glossary/" . strtolower(substr($matches[0],0,1) . "/" . $matches[0]) . "/\">" . $matches[0] . "</a>";'
),
$content
);
return preg_replace('/(<[^<]+)<a\s.*?>(.*?)<\/a>/si','$1$2', $content);
}
add_filter('the_content', 'add_glossary_links');
アイデアは、私は私のデータベースからの単語のリストを取得するということです。それらが存在する場合は、適切な用語集へのリンクで置き換えます。
$wordlist
は、このようにしてエコーさ:http://pastebin.com/6XnWBJwM
私が受けてるエラーはこれです:
Warning: preg_replace_callback(): Unknown modifier 'c' in /my.website/wp-content/themes/mytheme/functions.php on line 384
ライン384は、このセグメントの最後の行です:
$content = preg_replace_callback(
'/\b('.$wordlist.')\b/i',
create_function(
'$matches',
'return "<a href=\"/glossary/" . strtolower(substr($matches[0],0,1) . "/" . $matches[0]) . "/\">" . $matches[0] . "</a>";'
),
$content
);
正規表現の書式設定や単語リストの表示方法に問題があると推測しますが私はそれを私の人生のために知ることはできません。事前に
おかげで、
第2引数のない 'preg_quote()'は '/'をエスケープしないことに注意してください。 – alex
編集時に修正されました。ありがとう。 –
私はGROUP_CONCATを使用しています。なぜなら、高速化のために私に提案されたからです。リストはデータベースの1,750行から派生しています。 SQLを変更せずに他の方法がありますか? – dunc