web-dev-qa-db-fra.com

Pourquoi le fichier fonctions.php est appelé 8 fois pour un seul chargement de page?

Je viens d'ajouter le code suivant à functions.php.

$my_post = array(
  'post_title'    => 'Test Title 02',
  'post_content'  => 'Test Des 02',
  'post_status'   => 'publish',
  'post_author'   => 1
);

wp_insert_post( $my_post );

Il y a 8 postes ont été créés avec seulement une page de chargement. On dirait que le fichier functions.php est appelé 8 fois pour un seul chargement de page. Pourquoi donc? Comment ça se passe?

3
Sandun

Ajoutez un plugin tel que Kint Debugger + Debug Bar et ajoutez le code suivant à votre functions.php.

    global $wp;
    ob_start('kint_debug_ob');
    d($wp);
    ob_end_flush();

Lorsque vous vérifiez la barre de débogage, vous devriez voir la trace qui vous indiquera dans quel ordre les fonctions ont été activées. Le chargement 8 fois est assez élevé pour une seule requête.

Il existe également une fonction de trace que vous pouvez utiliser qui est moins détaillée si vous ne voulez pas emprunter la route du plugin - wp_debug_backtrace_summary .

echo "<!----- BACKTRACE / START ----->";

print_r ( wp_debug_backtrace_summary() );

echo "<!----- BACKTRACE / END ----->";

Il est un peu étrange d’avoir un wp_insert_post aléatoire dans votre functions.php, alors peut-être que l’enveloppement de votre logique dans un crochet comme init pourrait vous aider dans l’intervalle.

Il est également possible qu'il ne s'agisse pas d'une demande unique. heartbeats enverra une requête ping au serveur si vous êtes dans la section admin et que c'est possible wp-cron peut le charger également (mais je ne suis pas sûr).

Pour vérifier tout cela, activez WP_DEBUG_LOG et enregistrez les événements.

4
jgraup

Solution - TOUJOURS PUT les commandes dans les actions:

add_action('init', 'my_func');
function my_func(){
    //.......
    //.......
    wp_insert_post( $my_post );
}

de plus, pour éviter les répétitions, placez ce code en haut du fichier .php:

if (defined('my_wpse_9999')) || !define('my_wpse_9999',true)) return;
0
T.Todua