2015-10-03 22 views
1

我不知道我在做什麼錯在這裏。我的代碼看起來完全像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。)

+0

函數被你的兩個過濾器調用兩次?通常,如果您嘗試在字符串上使用非數字數組鍵(即,「$ fields」是一個字符串,例如「false」而不是數組),則會得到該警告。你可以通過測試來清除錯誤,如果你已經傳遞了一個數組(你可以通過var_dump以這種方式調試函數,如果不是數組則可以退出) – David

+0

錯誤消息意味着'$ fields'不是數組(當時發生錯誤),但是一個字符串。錯誤消息之後顯示的調試輸出證實了這一點。因此,請查閱過濾器文檔,並查看哪兩種參數傳遞給過濾器功能。一般來說,這兩者之間有所不同,或者它可能取決於您嘗試操作的表單實際上有多少個字段(1對多個)。 – CBroe

+0

啊哈,似乎我沒有意識到過濾器'comment_form_field_comment'的作用。我有一種誤解,認爲它是爲未登錄的訪問者過濾評論表單。原來是用來過濾註釋textarea文本,所以是的,它傳遞了一個字符串。我想,自從var_dump打印兩個數組的副本(我只包含一個),這兩個調用都接收到相同的數據。但仔細觀察後,我發現數據不是重複的(一個是字段,其他標籤),而且這兩個var_dumps都是應用第一個過濾器的結果。謝謝! – mightimaus

回答

0

因此,看起來我並沒有意識到過濾器comment_form_field_comment的功能。我有一種誤解,認爲它是爲未登錄的訪問者過濾評論表單。原來是用來過濾註釋textarea文本,所以是的,它傳遞了一個字符串。我想,自從var_dump打印兩個數組的副本(我只包含一個),這兩個調用都接收到相同的數據。但仔細觀察後,我發現數據不是重複的(一個是字段,其他標籤),而且這兩個var_dumps都是應用第一個過濾器的結果。

此外,我第一個(不產生警告的)過濾器也是錯誤的。要更改標題,我需要使用comment_form_defaults