当我创建一个函数(在child-theme/functions.php
中)来修改the_content()
中的文本时,以下函数运行良好。
function my_text_changes ( $text ) {
$text = str_replace( 'My Site Name', '<em>My Site Name</em>', $text );
return $text;
}
add_filter( 'the_content','my_text_changes' );
此功能仅修改文本的一部分(多次)。当我更改函数以便我可以修改更多文本部分时,我使用了相同的变量和str_replace并将其放入switch / case(也尝试if语句)并且所有内容都消失了。
function my_text_changes ( $text ) {
switch( $text ) {
case "My Site Name":
$text = str_replace( 'My Site Name', '<em>My Site Name</em>', $text );
return $text;
break;
}
}
add_filter( 'the_content','my_text_changes' );
我想构建多个案例,但无法让第一个案例工作。如果我将switch / case更改为if语句,情况也是如此。我尝试将$text =
和return $text
更改为$newtext =
和return $newtext
无效。有什么想法吗?
答案 0 :(得分:0)
您在那里传递的$text
参数包含整个内容。您switch
作业将永远不会成立(除非整个内容由“我的网站名称”组成),您的文字将不会被替换。
一切都消失的原因是因为您必须return
$text
语句之外的switch
变量(或您的if/else
s),否则它将不会显示任何内容(基本上你用什么都代替整个内容)。
事实上,如果我正确理解您的问题,您可以在没有任何str_replace
或if/else
的情况下运行switch
。
虽然原始答案有效,但还有更好的方法。你在评论中争论第二个$text
将覆盖第一个赋值,这是真的,但不是问题,因为前一个已经是正确替换字符串的文本。试试吧,亲自看看。
无论如何,我检查了docs for str_replace
并确实接受了array
作为参数,所以你的问题可能会这样解决:
function my_text_changes ( $text ) {
$searches = array( 'My Site Name', 'a second string' );
$replaces = array( '<em>My Site Name</em>', 'a <strong>second</strong> string' );
$new_text = str_replace( $searches, $replaces, $text );
/* ... */
return $new_text;
}
只是做:
function my_text_changes ( $text ) {
$text = str_replace( 'My Site Name', '<em>My Site Name</em>', $text );
$text = str_replace( 'second_string', 'replacement', $text);
/* ... */
return $text;
}
答案 1 :(得分:0)
你不应该在休息之前使用return语句。
但问题似乎与引用的代码不同。你能检查托管上的php错误日志并分享相同的吗?