Аз съм администратор на уебсайта си и когато включа отстраняване на грешки, за да проследя проблема на сайта, debug.log е затрупан със стотици редове PHP известия всеки ден за два PHP проблема в приставка, която скрива информацията за отстраняване на грешки Търся. Опитах се да се свържа с автора на приставката, за да получа поправка, за да мога да спра натрупването на дневника, но той не е отговорил на въпроси във форума за приставката.

Какво трябва да направя, за да поправя тези две грешки в приставката WordPress, за да спрат да добавят стотици PHP известия в debug.log?

Опитвате се да получите свойство на не-обект в /plugins/custom-author-byline/custom-author-byline.php на ред 27

Кодът на ред 27 е

$custom_author_uri = get_post_meta($post->ID, 'uri', TRUE); 

Недефиниран индекс: author_noncename в /plugins/custom-author-byline/custom-author-byline.php на ред 80

Кодът на ред 80 е

 if ( !wp_verify_nonce( $_POST[$meta_box['name'].'_noncename'], plugin_basename(__FILE__) )) { 

Задавам този въпрос тук, защото преди 8 месеца попитах как да коригирам тези грешки във форума за поддръжка на приставката. Никой не е отговорил и разглежда форума за поддръжка, някои въпроси предлагат отговори или повече коментари от други потребители, но нищо от автора повече от 6 години.

Надявам се някой тук да ми помогне с това.

Допълнителна информация: Пълният код около ред 27 е следната функция.

// Replaces the_author_link() output with your custom entry or return the logged in user if there is no custom entry function custom_author_uri( $author_uri ) { //global $authordata; global $post, $authordata; $custom_author_uri = get_post_meta($post->ID, 'uri', TRUE); if($custom_author_uri) return $custom_author_uri; return $author_uri; } add_filter( 'author_link', 'custom_author_uri' ); 

Пълният код, включващ ред 80, е следната функция.

function cab_save_postdata( $post_id ) { global $post, $cab_new_meta_boxes; foreach($cab_new_meta_boxes as $meta_box) { if ( !wp_verify_nonce( $_POST[$meta_box['name'].'_noncename'], plugin_basename(__FILE__) )) { return $post_id; } if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id )) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id )) return $post_id; } $data = $_POST[$meta_box['name']]; if(get_post_meta($post_id, $meta_box['name']) == '') add_post_meta($post_id, $meta_box['name'], $data, true); elseif($data != get_post_meta($post_id, $meta_box['name'], true)) update_post_meta($post_id, $meta_box['name'], $data); elseif($data == '') delete_post_meta($post_id, $meta_box['name'], get_post_meta($post_id, $meta_box['name'], true)); } } add_action('admin_menu', 'cab_create_meta_box'); add_action('save_post', 'cab_save_postdata'); 

  • „нищо от автора повече от 6 години.“ - актуализиран ли е плъгинът по това време?
  • А, ако това е свързано с този плъгин, тогава изглежда, че е актуализиран за последно "преди 7 години"! Както отбелязва бележката в горната част на тази страница, „Тя може вече да не се поддържа или поддържа и може да има проблеми със съвместимостта, когато се използва с по-нови версии на WordPress. "Това е достатъчно напред, за да потисне / маскира тези конкретни грешки, но без да знаем основната кодова база, това може само да прикрие по-сериозен проблем с кода.
  • Това са и двете "известия" (не строго "грешки" в смисъла на PHP). Кодът работи ли добре, освен тези досадни известия?
  • Да, кодът работи добре. Просто обичам нещата да са чисти, но ако не нараняват нищо, ще игнорирам всички редове, които генерират в debug.log. Ще редактирам въпроса, за да добавя пълния код, който включва тези редове.
  • Този въпрос изглежда е извън темата, защото е за уеб разработка което е извън темата в Pro Webmasters. Въпроси за уеб разработка може да се задават в Stack Overflow, но не забравяйте да прочетете техните често задавани въпроси, преди да публикувате, за да сте сигурни, че въпросът ви отговаря на техните указания. В сегашния си вид този въпрос го прави не отговарят на техните указания, тъй като това би бил дублиран въпрос.

Тъй като вашият "код работи добре" и те са просто E_NOTICE съобщения (за разлика от предупреждения или грешки) тогава трябва да можете да модифицирате кода си по следния начин, за да заобиколите тези съобщения:

Опитва се да получи свойство на обект ...

Трябва да проверим дали $post променливата е от очаквания тип, преди да се опита да я обработи.

// Replaces the_author_link() output with your custom entry or return the logged in user if there is no custom entry function custom_author_uri( $author_uri ) { //global $authordata; global $post, $authordata; if (is_object($post) && property_exists($post,'ID')) { $custom_author_uri = get_post_meta($post->ID, 'uri', TRUE); if ($custom_author_uri) { return $custom_author_uri; } } return $author_uri; } add_filter( 'author_link', 'custom_author_uri' ); 

Недефиниран индекс: author_noncename

function cab_save_postdata( $post_id ) { global $post, $cab_new_meta_boxes; foreach($cab_new_meta_boxes as $meta_box) { if (empty($_POST[$meta_box['name'].'_noncename'])) { return $post_id; } if ( !wp_verify_nonce( $_POST[$meta_box['name'].'_noncename'], plugin_basename(__FILE__) )) { return $post_id; } if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id )) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id )) return $post_id; } $data = $_POST[$meta_box['name']]; if(get_post_meta($post_id, $meta_box['name']) == '') add_post_meta($post_id, $meta_box['name'], $data, true); elseif($data != get_post_meta($post_id, $meta_box['name'], true)) update_post_meta($post_id, $meta_box['name'], $data); elseif($data == '') delete_post_meta($post_id, $meta_box['name'], get_post_meta($post_id, $meta_box['name'], true)); } } add_action('admin_menu', 'cab_create_meta_box'); add_action('save_post', 'cab_save_postdata'); 

Може би бихте могли провалят се по-рано в тази втора функция - но без да знаете кода, това е трудно да се каже. Може да се наложи да добавите допълнителни проверки, ако все още получавате съобщения "Неопределен индекс".

(Въпреки че неприятната мисъл в задната част на съзнанието ми е защо тези функции изобщо се извикват при такива обстоятелства?)

Тези промени не трябва да правят кода да работи по различен начин (тъй като казахте, че „работи добре“) - той просто избягва заядливите съобщения E_NOTICE, ако приемем, че тези условия са нормални и очаквани.

Както беше предложено в другия ви въпрос, защо получавате тези съобщения E_NOTICE сега, може просто да е разлика в нивото по подразбиране error_reporting след актуализиране до PHP 7. (?)

  • 1 Благодаря. Замених двете функции с вашата маркировка, но в първата има грешка. Къдравите скоби са небалансирани и това уби сайта. Обърнах посоката на четвъртия и сайтът се върна. Съобщенията E_NOTICE са изчезнали. Успех! Моля, редактирайте кода, за да коригирате скобата.
  • Моля. Извинете, да, тази обърната къдрава скоба беше печатна грешка! Поправих отговора си. (Това би довело до фатална грешка при синтактичния анализ!)

е работил за вас: Charles Robertson | Искате ли да се свържете с нас?