试图覆盖WordPress评论表单字段的非法字符串偏移量


Illegal string offset trying to override WordPress comment form fields

我不知道我做错了什么。我的代码看起来和这个家伙的一模一样(方法2,在底部),但它不起作用。下面是我的代码:

/** Change comment form title **/
function change_comment_fields($fields) {
    if (isset($fields)) {
        $fields["title_reply"] = "Leave a Comment";
        var_dump($fields);
    }
    return $fields;
}
add_filter( 'comment_form_default_fields', 'change_comment_fields' );
add_filter( 'comment_form_field_comment', 'change_comment_fields' );
var_dump

:

array(4) {
  ["author"]=>
     string(207) "<p class="comment-form-author"><label for="author">Name <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" aria-required='true' required='required' /></p>"
  ["email"]=>
     string(235) "<p class="comment-form-email"><label for="email">Email <span class="required">*</span></label> <input id="email" name="email" type="text" value="" size="30" aria-describedby="email-notes" aria-required='true' required='required' /></p>"
  ["url"]=>
     string(125) "<p class="comment-form-url"><label for="url">Website</label> <input id="url" name="url" type="text" value="" size="30" /></p>"
  ["title_reply"]=>
     string(15) "Leave a Comment"
}

所以看起来好像数组被正确地改变了。"留下一个回复"不会改变,但如果我设置"url"而不是"title_field",url框会变成"留下一个评论"。

然而,PHP仍然输出这个:

Warning: Illegal string offset 'title_reply' in /home/<name>/public_html/<site>/wp-content/themes/baskerville-child/functions.php on line 14
string(113) "Lp class="comment-form-comment">

(第14行对应于我设置$fields["title_reply"]的地方)

任何想法?

所以我似乎没有意识到过滤器comment_form_field_comment的作用。我误以为这是为未登录的访问者过滤评论表单。它是用来过滤评论textarea文本的,它传递了一个字符串。我认为,由于var_dump打印了数组的两个副本(我只包含了一个),所以两个调用都接收到相同的数据。但是经过仔细检查,我发现数据不是重复的(一个是字段,另一个是标签),并且两个var_dumps都是应用第一个过滤器的结果。

同样,I第一个(不产生警告)过滤器也是错误的。要更改标题,我需要使用comment_form_defaults