web-dev-qa-db-fra.com

Comment corriger l'erreur "file_get_contents" a été trouvé dans le fichier functions.php "?

Je construis un thème wordpress, j'atteins l'étape de la finalisation.

Pour le moment, j'ai du mal à corriger une erreur soulevée par Theme Check:

file_get_contents trouvé dans le fichier functions.php. Les opérations sur les fichiers doivent utiliser les méthodes WP_Filesystem au lieu des appels directs PHP du système de fichiers.

Voici le code:

function theme_critical() {
  $critical_css = file_get_contents( get_template_directory() . '/css/critical.css');
  echo '<style>' . $critical_css . '</style>';
}

Fondamentalement, ce code prend le contenu d'un fichier CSS, pour l'imprimer dans l'en-tête. C'est un css critique.

J'ai cherché, mais je ne pouvais pas trouver un moyen d'utiliser WP_filesystem simplement à la même chose que file_get_content.

Quelqu'un est-il déjà confronté à ce problème?

Merci.

3
user3415011

Pour ajouter une feuille de style externe:

De manière générale, vous devez utiliser la fonction wp_enqueue_style() pour ajouter une feuille de style externe à votre thème.

function wpse259600_add_style() {
    wp_enqueue_style( 'theme_critical', get_template_directory_uri() . '/css/critical.css', array(), '1.0.0' );
}
add_action( 'wp_enqueue_scripts', 'wpse259600_add_style' );

Pour ajouter une feuille de style interne:

Toutefois, si (pour une raison quelconque) vous devez ajouter une feuille de style interne (c’est-à-dire imprimer le fichier CSS entier dans la balise HTML <head> à l’aide de la balise <style>), vous pouvez utiliser inclue_once comme ci-dessous:

add_action( 'wp_head', 'wpse259600_internal_css_print' );
function wpse259600_internal_css_print() {
    echo '<style type="text/css">';
    // this will also allow you to use PHP to create dynamic css rules
    include_once get_template_directory() . '/css/critical.css';
    echo '</style>';
}

Ceci ne générera pas d’avertissement dans theme check . Bien que je ne le recommande pas. Si vous souhaitez ajouter un CSS personnalisé de cette manière, vous devez l’enregistrer dans la base de données avec les options de thème de personnalisation, puis l’ajouter avec la fonction wp_add_inline_style avec le fichier CSS principal de votre thème.

2
Fayaz

Vous ne devriez pas faire écho à vos styles CSS dans le <head>. Vous devriez utiliser wp_enqueue_style()

Ajoutez quelque chose comme ceci à votre fichier functions.php:

add_action( 'wp_enqueue_scripts', 'wpse_259600_enqueue_scripts' );
function wpse_259600_enqueue_scripts() {
  wp_enqueue_style( 'mytheme-critical', get_template_directory_uri() . '/css/critical.css' );
}
0
Nathan Johnson