Sounds of India | En enestående nationalsang

Jeg er administrator af mit websted, og når jeg tænder fejlretning for at spore et problem på webstedet, er debug.log rodet med hundreder af linjer med PHP-meddelelser hver dag om to PHP-problemer i et plugin, der skjuler fejlretningsoplysningerne Jeg leder efter. Jeg prøvede at kontakte forfatteren af ​​pluginet for at få en løsning, så jeg kan stoppe opbygningen af ​​loggen, men han har ikke reageret på spørgsmål i forumet til plugin'et.

Hvad skal jeg gøre for at rette disse to fejl i WordPress-pluginet, så de holder op med at tilføje hundreder af PHP-meddelelser i debug.log?

Forsøger at få ejendom til ikke-objekt i /plugins/custom-author-byline/custom-author-byline.php på linje 27

Koden på linje 27 er

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

Udefineret indeks: author_noncename i /plugins/custom-author-byline/custom-author-byline.php on line 80

Koden på linje 80 er

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

Jeg stiller dette spørgsmål her, fordi jeg for 8 måneder siden spurgte, hvordan jeg fikser disse fejl i supportforumet for pluginet. Ingen har reageret og kigget på supportforumet, nogle spørgsmål har foreslået svar eller flere kommentarer fra andre brugere, men intet fra forfatteren i over 6 år.

Jeg håber, at nogen her kan hjælpe mig med dette.

Yderligere oplysninger: Den fulde kode omkring linje 27 er følgende funktion.

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

Den fulde kode, der involverer linje 80, er følgende funktion.

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

  • "intet fra forfatteren i over 6 år." - er pluginnet blevet opdateret på dette tidspunkt?
  • Ah, hvis dette vedrører dette plugin, ser det ud til, at det sidst blev opdateret "for 7 år siden"! Som det fremgår af noten øverst på denne side, "Det kan ikke længere opretholdes eller understøttes og kan have problemer med kompatibilitet, når de bruges med nyere versioner af WordPress. "Det er ligetil nok til at undertrykke / maskere disse bestemte fejl, men uden at kende den underliggende kodebase, maskerer det måske kun et mere alvorligt problem med koden.
  • Disse er begge "meddelelser" (ikke strengt "fejl" i PHP-forstand). Fungerer koden OK bortset fra disse irriterende meddelelser?
  • Ja, koden fungerer OK. Jeg kan bare godt lide, at ting skal være rene, men hvis de ikke skader noget, ignorerer jeg alle de linjer, de genererer i debug.log. Jeg redigerer spørgsmålet for at tilføje den fulde kode, der involverer disse linjer.
  • Dette spørgsmål ser ud til at være uden for emnet, fordi det handler om web-udvikling hvilket er uden for emnet hos Pro Webmasters. Webudviklingsspørgsmål kan blive stillet på Stack Overflow, men sørg for at læse deres ofte stillede spørgsmål, inden du sender, for at sikre at dit spørgsmål overholder deres retningslinjer. I sin nuværende form gør dette spørgsmål det ikke opfylde deres retningslinjer, da det ville være et duplikat spørgsmål.

Da din "kode fungerer OK", og disse er lige E_NOTICE meddelelser (i modsætning til advarsler eller fejl) så skal du være i stand til at ændre din kode som følger for at løse disse meddelelser:

Forsøger at få ejendom til ikke-objekt ...

Vi er nødt til at kontrollere, at $post variabel er af den forventede type, inden du forsøger at behandle den.

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

Udefineret indeks: 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'); 

Måske kunne du svigte hurtigere i denne anden funktion - men uden at kende koden, er det svært at sige. Du skal muligvis tilføje yderligere kontrol, hvis du stadig får "Undefined index" -meddelelser.

(Selvom den nagende tanke bag i mit sind er, hvorfor disse funktioner overhovedet kaldes under sådanne omstændigheder?)

Disse ændringer bør ikke få koden til at køre anderledes (da du sagde, at den "fungerer OK") - den undgår simpelthen den eller de gnidende E_NOTICE-meddelelser, forudsat at disse forhold er normale og forventede.

Som foreslået i dit andet spørgsmål, hvorfor får du disse E_NOTICE-meddelelser nu, kan det simpelthen være en forskel i standardfejlrapporteringsniveauet efter opdatering til PHP 7. (?)

  • 1 Tak. Jeg har erstattet de to funktioner med din markering, men der er en fejl i den første. De krøllede parenteser er ubalancerede, og det dræbte stedet. Jeg vendte retningen af ​​den fjerde, og siden kom tilbage. E_NOTICE-meddelelserne er forsvundet. Succes! Rediger koden for at rette beslaget.
  • Selv tak. Undskyld, ja, den omvendte krøllede bøjle var en skrivefejl! Jeg har rettet mit svar. (Det ville have resulteret i en fatal parse-fejl!)

arbejdet for dig: Charles Robertson | Ønsker du at kontakte os?