我不知道我在做什麼錯在這裏。我的代碼看起來完全像this guy's(方法2,朝下),但它不起作用。這裏是我的代碼:非法字符串偏移試圖覆蓋WordPress評論表格字段
/** 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_dumps:
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"
}
所以看起來好像陣列被適當地改變。 「留言」不會改變,但如果我設置'網址'而不是'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行對應於那裏我設置$域[ 「title_reply」。)
任何想法? (您可以查看示例頁面here。)
函數被你的兩個過濾器調用兩次?通常,如果您嘗試在字符串上使用非數字數組鍵(即,「$ fields」是一個字符串,例如「false」而不是數組),則會得到該警告。你可以通過測試來清除錯誤,如果你已經傳遞了一個數組(你可以通過var_dump以這種方式調試函數,如果不是數組則可以退出) – David
錯誤消息意味着'$ fields'不是數組(當時發生錯誤),但是一個字符串。錯誤消息之後顯示的調試輸出證實了這一點。因此,請查閱過濾器文檔,並查看哪兩種參數傳遞給過濾器功能。一般來說,這兩者之間有所不同,或者它可能取決於您嘗試操作的表單實際上有多少個字段(1對多個)。 – CBroe
啊哈,似乎我沒有意識到過濾器'comment_form_field_comment'的作用。我有一種誤解,認爲它是爲未登錄的訪問者過濾評論表單。原來是用來過濾註釋textarea文本,所以是的,它傳遞了一個字符串。我想,自從var_dump打印兩個數組的副本(我只包含一個),這兩個調用都接收到相同的數據。但仔細觀察後,我發現數據不是重複的(一個是字段,其他標籤),而且這兩個var_dumps都是應用第一個過濾器的結果。謝謝! – mightimaus