web-dev-qa-db-fra.com

Thème Personnalisateur - CSS dynamique PHP Fichier

Je suis récemment passé de l'utilisation d'une classe personnalisée pour activer un panneau d'options de thème au thème Customizer intégré à Wordpress.

Tout se passe assez bien - l'aperçu en direct fonctionne, mais je suis un peu coincé sur l'utilisation de 'get_theme_mod ()' pour récupérer les valeurs dans un fichier PHP dédié.

En utilisant mon ancienne classe, je pouvais mettre en file d'attente 'dynamic.css.php', où j'inclurais 'wp-load.php' pour pouvoir utiliser diverses fonctions afin d'obtenir des options, etc. fonction personnalisée dans le thème wp_head. Je ne veux pas vraiment le faire de cette façon sauf si nécessaire.

Donc, je suis en train de mettre mon fichier 'dynamic.css.php' en file d'attente et il se présente comme suit:

<?php

header("Content-type: text/css; charset: UTF-8");

define( 'WP_USE_THEMES', false );
include('../../../../../wp-load.php'); ?>

@media all and (max-width: <?php echo get_theme_mod('nav-primary-breakpoint'); ?>) {

    .drawer {
        margin-top: 42px;
        padding-top: 42px;
        top: -42px;
    }

}

C’est ce que j’avais fait auparavant; j’ai donc essayé de faire la même chose, mais get_theme_mod () ne fonctionne pas du tout.

Je me méfie également d'inclure wp-load.php à nouveau - j'espérais utiliser une méthodologie similaire à celle utilisée auparavant sans avoir à l'inclure réellement.

Mes objectifs sont donc de:

  • éviter de charger wp-load.php
  • avoir mon css dans un fichier séparé
  • éviter d'avoir la sortie css de mes en-têtes de thèmes

J'ai également essayé de supprimer l'importation wp-load.php et d'inclure le fichier dans l'en-tête de mon thème, mais cela place la sortie dans la balise body.

Des suggestions pour atteindre mes objectifs ici?

2
0Neji

@s_ha_dum a raison, le plugin ajax api est la voie à suivre. J'ai moi-même rencontré ce problème avec un fichier js dynamique que je créais tout à l'heure.

Fondamentalement, vous mettriez votre style en file d'attente comme suit:

wp_enqueue_style('dynamic-css',
             admin_url('admin-ajax.php').'?action=dynamic_css',
             $deps,
             $ver,
             $media);

Créez ensuite une fonction pour charger votre fichier css dynamique:

function dynaminc_css() {
       require(get_template_directory().'/css/dynamic.css.php');
       exit;
}

Et ajoutez les actions ajax:

add_action('wp_ajax_dynamic_css', 'dynaminc_css');
add_action('wp_ajax_nopriv_dynamic_css', 'dynaminc_css');

wp_ajax_* activera la fonction nommée et aura accès à toutes les fonctions fondamentales de wp pour le front; end wp_ajax_nopriv_* exécute les visiteurs non connectés

Notez que j'ai trouvé que add_action('wp_ajax_custom_function', 'custom_function'), si dans un plugin, doit être dans le fichier d'activation de base du plugin, sinon il sera ignoré. Il y a une note succincte à ce sujet dans l'action référence doc . EDIT: Je viens de tester à nouveau, et je ne peux pas le répéter. Apparemment, il n'y a pas de telle restriction.

Cette explication est une version développée de ce message de forum du codex: http://Wordpress.org/support/topic/best-way-to-create-a-css-file-dynamically#post-4857705

8
orionrush