Suprimarea notificărilor depreciate
Când folosesc:
define('WP_DEBUG', 1);
În fișierul meu wp-config.php, funcționează bine, dar modific o temă veche și aș dori să suprim notificările depreciate.
După înțelegerea mea, adăugarea acestui cod:
error_reporting( E_ERROR | E_NOTICE | E_PARSE )
Ar trebui să rezolve problema. L-am adăugat în wp-config.php și în header.php în tema mea. Din păcate, nu are niciun efect. Este ceva setat la nivel de server? De asemenea, nici următorul cod nu face vreo diferență:
ini_set('display_errors', 1);
Așa cum s-a cerut în comentariile de mai jos, iată câteva dintre notificări. Folosesc o versiune modificată a temei Construct 2, destul de veche acum, dar nu ar fi sigur să o actualizez. Încerc să conving clientul să mă lase să o rescriu, site-ul este destul de simplu, dar cum nu poate vedea nimic în neregulă, nu este stricat, nu vrea să cheltuiască banii.
Deprecated: Atribuirea valorii de retur a new prin referință este depreciată în
/Volumes/Macintosh HD/Sites/MAMP (custodian)/wordpress/wp-content/themes/construct2/option-tree/ot-loader.phpla linia 369Strict Standards: Declarația
DropDown_Nav_Menu::start_lvl()ar trebui să fie compatibilă cuWalker_Nav_Menu::start_lvl(&$output, $depth = 0, $args = Array)în/Volumes/Macintosh HD/Sites/MAMP (custodian)/wordpress/wp-content/themes/construct2/dropdown-menus.phpla linia 192
Am reușit să suprimați notificările din jurnal și erorile afișate folosind funcția error_reporting într-un plugin must-use, care este încărcat suficient de devreme pentru a prinde majoritatea avertismentelor din codul de bază al WordPress. Acest lucru este util pentru avertismentele care provin din fișierele de bază/pluginuri pe care nu ar trebui să le modificați.
Am creat un fișier php în folderul /wp-content/mu-plugins/ cu acest cod:
<?php
error_reporting(E_ALL & ~E_WARNING & ~E_DEPRECATED & ~E_USER_DEPRECATED & ~E_NOTICE);
?>
Mulțumesc foarte mult! Am creat un plugin WordPress pentru a controla MU plugin-ul direct din panoul de administrare.
volkerschulz
După cum a menționat mmm:
în ce fișier apare prima notificare?
Oriunde este menționată locația acestei funcții învechite (calea/către/un/fișier.php), poți insera următoarele imediat după eticheta <?php care începe fișierul:
error_reporting(0);
Am încercat funcțiile menționate mai sus și le-am introdus în fișierul meu wp-config.php când am întâmpinat o situație similară, dar nu au funcționat pentru mine. Această soluție va dezactiva avertismentele, notificările despre funcții învechite și orice altceva în afară de erorile propriu-zise.
Interesant (adică evidențiind superficialitatea înțelegerii mele, inserând error_reporting(0); (sau orice altă variație) în primul dintre fișierele menționate în lunga listă de mesaje de eroare, suprima toate mesajele din fișierele ulterioare diferite, dar nu și notificarea de depreciere din acel fișier.
Chris Pink
@ChrisPink Nu înțeleg pe deplin ultimul tău comentariu, poți să clarifici, te rog?
Ethan Rævan
Îmi pare rău, nu m-am exprimat foarte bine. Inserând error_reporting(0) în fișierul ot-loader.php (conform mesajului din OP) am suprimat toate notificările ulterioare, dar nu pe cea care provine din ot-loader.php (cea din OP). Așadar, presupun că trebuie să inserez funcția error_reporting() în fișierul care apelează ot-loader.php.
Chris Pink
Aceasta este probabil cea mai "WordPress" metodă de a face acest lucru.
Codul TREBUIE să fie plasat în fișierul wp-config, după definirea WP_DEBUG (și orice alte definiții) deoarece acest filtru specific rulează înainte de încărcarea oricăror plugin-uri.
$GLOBALS['wp_filter'] = array(
'enable_wp_debug_mode_checks' => array(
10 => array(
array(
'accepted_args' => 0,
'function' => function () {
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
// *** Aceasta este linia cheie - modificați pentru a ajusta la starea de logging dorită
error_reporting( E_ALL & ~E_DEPRECATED );
ini_set( 'display_errors', defined( 'WP_DEBUG_DISPLAY' ) && WP_DEBUG_DISPLAY ? 1 : 0 );
if ( in_array( strtolower( (string) WP_DEBUG_LOG ), array( 'true', '1' ), true ) ) {
$log_path = WP_CONTENT_DIR . '/debug.log';
} elseif ( is_string( WP_DEBUG_LOG ) ) {
$log_path = WP_DEBUG_LOG;
} else {
$log_path = false;
}
if ( $log_path ) {
ini_set( 'log_errors', 1 );
ini_set( 'error_log', $log_path );
}
if (
defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || defined( 'MS_FILES_REQUEST' ) ||
( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) ||
wp_doing_ajax() || wp_is_json_request() ) {
ini_set( 'display_errors', 0 );
}
}
return false;
},
),
),
));
De ce înainte de încărcarea oricăror plugin-uri? Avertismentele de depreciere provin din temă.
Rup
se pare că multe plugin-uri modifică și această valoare, așa că am avut noroc cu aceste două abordări,
// încercând să fiu ultima persoană care setează această valoare
add_action('wp_loaded', function() { error_reporting( E_ALL & ~E_NOTICE );
});
// chiar mai târziu, dar nu prea târziu
add_action('wp', function() { error_reporting( E_ALL & ~E_NOTICE );
});
Puteți face astfel, încât să puteți continua să depanați când este necesar:
Exemplu (plasați în fișierul functions.php al temei):
add_action('wp_loaded', function() {
if(WP_DEBUG==false){
// forțează dezactivarea raportării erorilor
error_reporting(0);
}else {
if(WP_DEBUG==true){
// forțează propriile reguli
error_reporting(E_ALL & ~E_WARNING & ~E_DEPRECATED & ~E_USER_DEPRECATED & ~E_NOTICE);
}
}
});