Zvuky Indie Jediná svého druhu národní hymna

Jsem administrátorem svého webu a když zapnu ladění, aby se zjistil problém na webu, debug.log je přeplněný stovkami řádků oznámení PHP každý den o dvou problémech s PHP v pluginu, který skryje informace o ladění Hledám. Snažil jsem se kontaktovat autora pluginu, aby získal opravu, abych mohl zastavit hromadění protokolu, ale nereagoval na otázky ve fóru pro plugin.

Co musím udělat, abych opravil tyto dvě chyby v pluginu WordPress, aby v debug.log přestali přidávat stovky oznámení PHP?

Pokus o získání vlastnosti neobjektu v /plugins/custom-author-byline/custom-author-byline.php na řádku 27

Kód na řádku 27 je

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

Nedefinovaný index: author_noncename v /plugins/custom-author-byline/custom-author-byline.php na řádku 80

Kód na řádku 80 je

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

Ptám se zde na tuto otázku, protože před 8 měsíci jsem se zeptal, jak opravit tyto chyby ve fóru podpory pro plugin. Nikdo nereagoval a při pohledu na fórum podpory některé otázky navrhly odpovědi nebo více komentářů od jiných uživatelů, ale nic od autora již více než 6 let.

Doufám, že mi s tím někdo pomůže.

Další informace: Celý kód kolem řádku 27 je následující funkce.

// 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' ); 

Celý kód zahrnující řádek 80 je následující funkce.

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'); 

  • „nic od autora více než 6 let.“ - byl plugin v této době aktualizován?
  • Ach, pokud se to týká tohoto pluginu, zdá se, že byl naposledy aktualizován „před 7 lety“! Jak uvádí poznámka v horní části této stránky, „Je možné, že již nebude udržována nebo podporována a může mít problémy s kompatibilitou při použití s ​​novějšími verzemi WordPress"Je to dost přímočaré k potlačení / maskování těchto konkrétních chyb, ale bez znalosti podkladové kódové základny to může být maskování pouze vážnějšího problému s kódem."
  • Jedná se o obě „upozornění“ (nikoli striktně „chyby“ ve smyslu PHP). Funguje kód dobře, kromě těchto nepříjemných oznámení?
  • Ano, kód funguje dobře. Jen se mi líbí, aby věci byly čisté, ale pokud nic neubližují, budu ignorovat všechny řádky, které generují v debug.log. Upravím otázku a přidám celý kód, který zahrnuje tyto řádky.
  • Tato otázka se zdá být mimo téma, protože jde o vývoj webových aplikací který je u Pro Webmasters mimo téma. Otázky týkající se vývoje webu mohou být kladeny na Stack Overflow, ale před odesláním si přečtěte jejich FAQ, abyste se ujistili, že vaše otázka splňuje jejich pokyny. Ve své současné podobě tato otázka ano ne splnit jejich pokyny, protože by to byla duplicitní otázka.

Protože váš „kód funguje dobře“ a tyto jsou prostě E_NOTICE zprávy (na rozdíl od varování nebo chyby), abyste mohli tyto zprávy obejít, měli byste být schopni upravit svůj kód takto:

Pokus o získání majetku bezobjektu ...

Musíme zkontrolovat, že $post proměnná je očekávaného typu, než se ji pokusíte zpracovat.

// 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' ); 

Nedefinovaný index: 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'); 

Možná bys mohl selhat dříve v této druhé funkci - ale bez znalosti kódu, to je těžké říci. Možná budete muset přidat další kontroly, pokud stále dostáváte zprávy „Nedefinovaný index“.

(Přestože ta otravná myšlenka v zadní části mé mysli je důvodem, proč se tyto funkce za takových okolností vůbec volají?)

Tyto změny by neměly způsobit, že by kód běžel jinak (protože jste řekli, že „funguje dobře“) - jednoduše se vyhne otravným zprávám E_NOTICE za předpokladu, že tyto podmínky jsou normální a očekávané.

Jak je navrženo ve vaší další otázce, proč nyní dostáváte tyto zprávy E_NOTICE, může to být jednoduše rozdíl ve výchozí úrovni error_reporting po aktualizaci na PHP 7. (?)

  • 1 Děkuji. Nahradil jsem tyto dvě funkce vaším označením, ale v první došlo k chybě. Kudrnaté závorky jsou nevyvážené a místo to zabilo. Otočil jsem směr čtvrtého a místo se vrátilo. Zprávy E_NOTICE zmizely. Úspěch! Upravte kód a závorku opravte.
  • Nemáš zač. Omlouváme se, ano, ta obrácená složená závorka byla překlep! Opravil jsem svou odpověď. (To by vedlo k fatální chyba při analýze!)

Pracoval pro vás: Charles Robertson | Chcete nás kontaktovat?