我不知道我做错了什么。我的代码看起来和这个家伙的一模一样(方法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