使用if语句或switch / case时,wordpress内容会消失

时间:2014-04-07 00:06:43

标签: php wordpress str-replace add-filter

当我创建一个函数(在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无效。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您在那里传递的$text参数包含整个内容。您switch作业将永远不会成立(除非整个内容由“我的网站名称”组成),您的文字将不会被替换。

一切都消失的原因是因为您必须return $text语句之外的switch变量(或您的if/else s),否则它将不会显示任何内容(基本上你用什么都代替整个内容)。

事实上,如果我正确理解您的问题,您可以在没有任何str_replaceif/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错误日志并分享相同的吗?