webentwicklung-frage-antwort-db.com.de

Theme Customizer - Dynamisches CSS PHP Datei

Ich habe kürzlich von der Verwendung einer benutzerdefinierten Klasse zum Aktivieren eines Themenoptionsfensters auf den integrierten Themenanpasser in Wordpress umgestellt.

Alles läuft ziemlich gut - ich habe eine Live-Vorschau, aber ich bin ein wenig damit beschäftigt, die Werte mit 'get_theme_mod ()' in einer dedizierten PHP -Datei abzurufen.

Mit meiner alten Klasse konnte ich 'dynamic.css.php' in die Warteschlange stellen, wobei ich 'wp-load.php' einfügte, um verschiedene Funktionen zum Abrufen von Optionen usw. zu verwenden benutzerdefinierte Funktion im Thema wp_head. Ich möchte es nicht wirklich so machen, es sei denn, es ist notwendig.

Also, ich starte gerade meine 'dynamic.css.php' Datei und sie sieht so aus:

<?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;
    }

}

So habe ich es früher gemacht, also habe ich im Grunde das Gleiche versucht, aber get_theme_mod () funktioniert überhaupt nicht.

Ich bin auch vorsichtig, wp-load.php wieder einzuschließen - ich hatte gehofft, eine ähnliche Methode wie zuvor zu verwenden, ohne sie tatsächlich einschließen zu müssen.

Meine Ziele sind also:

  • vermeiden Sie es, wp-load.php zu laden
  • habe meine CSS in einer separaten Datei
  • vermeiden Sie, dass CSS meinen Themenkopf ausgibt

Ich habe auch versucht, den Import von wp-load.php zu entfernen und die Datei in den Kopf meines Themas aufzunehmen, aber dadurch wird die Ausgabe in den Body-Tag verschoben.

Irgendwelche Vorschläge zur Erreichung meiner Ziele hier?

2
0Neji

@s_ha_dum ist richtig, das Ajax Plugin API ist der richtige Weg. Ich bin auf dieses Problem mit einer dynamischen js-Datei gestoßen, die ich vor einiger Zeit erstellt habe.

Grundsätzlich würden Sie Ihren Stil wie folgt einreihen:

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

Erstellen Sie dann eine Funktion zum Laden Ihrer dynamischen CSS-Datei:

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

Und fügen Sie die Ajax-Aktionen hinzu:

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

wobei wp_ajax_* die genannte Funktion auslöst und Zugriff auf alle grundlegenden WP-Funktionen für die Front hat; end wp_ajax_nopriv_* führt nicht angemeldete Besucher aus

Beachten Sie, dass add_action('wp_ajax_custom_function', 'custom_function') in einem Plugin in der Basisaktivierungsdatei des Plugins enthalten sein muss, da es sonst ignoriert wird. Es gibt eine knappe Anmerkung dazu im Aktionsreferenzdokument . EDIT: Ich habe das gerade noch einmal getestet und kann es nicht wiederholen. Anscheinend gibt es keine solche Einschränkung.

Diese Erklärung ist eine erweiterte Version dieses Codex-Forumsbeitrags: http://Wordpress.org/support/topic/best-way-to-create-a-css-file-dynamically#post-4857705

8
orionrush