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:
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?
@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');
où 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 EDIT: Je viens de tester à nouveau, et je ne peux pas le répéter. Apparemment, il n'y a pas de telle restriction.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 .
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