Customizer-Bildsteuerungs-Standardwert, der im Customizer, aber nicht im Frontend angezeigt wird

Ich verwende das WP_Customize_Image_Control , um das Bild hinzuzufügen.

Aber, der default ist nur in Customizer !!! Am Front-End wird empty .

Wie reproduzieren?

Kopieren Sie das Code-Snippet und fügen Sie es in Ihre Themes functions.php .

Besuchen Sie http://YOUR_SITE/wp-admin/customize.php?autofocus[section]=section-test_option , um den Abschnitt http://YOUR_SITE/wp-admin/customize.php?autofocus[section]=section-test_option zu öffnen

 add_action( 'customize_register', 'test_1234_customize_register' ); add_action( 'wp_head', 'test_1234_customizer_ouput_debug' ); function test_1234_customizer_ouput_debug() { // $options = get_theme_mod( 'this-is-the-test-option' ); $options = get_option( 'this-is-the-test-option' ); echo '
Default Image URL: '; print_r( $options ); echo '

'; } function test_1234_customize_register( $wp_customize ) { /** * Test Section */ $wp_customize->add_section( 'section-test_option', array( 'title' => __( 'Test Option', 'next' ), ) ); /** * Test Option - 1 */ $wp_customize->add_setting( 'this-is-the-test-option', array( 'default' => 'http://img.daswordpress.com/customization/googlelogo_color_272x92dp.png', 'type' => 'option', // Comment this parameter to use 'get_theme_mod' ) ); $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'this-is-the-test-option', array( 'section' => 'section-test_option', 'label' => __( 'Test', 'next' ), 'settings' => 'this-is-the-test-option', 'library_filter' => array( 'gif', 'jpg', 'jpeg', 'png', 'ico' ), ) ) ); }


Ausgabe

  1. In der Vorschau des Customizer-Fensters

http://bsf.io/net4f

  1. Im Frontend (auch im Inkognito-Fenster)

http://bsf.io/u59cm


Wie in obigem Beispiel kann ich folgendes verwenden: get_option( 'this-is-the-test-option', 'http://img.daswordpress.com/customization/googlelogo_color_272x92dp.png' ) , um das Standardbild zu erhalten.

Aber, es wird scheitern, wenn ich die Optionen in Array speichern. Z.B

 $wp_customize->add_setting( 'this-is-the-test-option[option1]', array( ... $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'this-is-the-test-option[option1]', array( ... 

In der obigen Situation ist die beste Lösung das Zusammenführen der Standardwerte. Ich habe die von @westonruter vorgeschlagene Lösung in gist gefunden .


Aber, Fragen sind:

  1. Warum ist der Standardwert im Customizer Preview window ? (Gemäß dem obigen Code-Snippet.)
  2. Ist der default für das Steuerelement WP_Customize_Image_Control nützlich?

Solutions Collecting From Web of "Customizer-Bildsteuerungs-Standardwert, der im Customizer, aber nicht im Frontend angezeigt wird"

Der Standardwert, den Sie für das Bild add_setting wird nur angewendet, wenn im Image- add_setting eine Option namens ‘Zurücksetzen auf Standard’ angegeben ist. Dieses Argument gibt keinen Standardwert für die Seite aus.

Das zweite Argument der function get_option( 'option_name', $default ) . Der Parameter $default gibt nichts an die database weiter . Es wurde nur zurückgegeben, wenn die Option nicht existiert. zB: wenn der Benutzer das Design installiert hat und das Logo (oder die Option, die irgendetwas auf der Seite anzeigt) darf nicht leer sein. Aber wenn er die Option speichert, wird die Option in der database vorhanden sein, auch wenn sie leer ist. Dann wird diese Vorgabe nicht mehr gelten. es funktioniert wie ein Platzhalter.

Wenn Sie einen Standardwert wünschen, selbst wenn die Option gespeichert wird und eine leere Zeichenfolge zurückgibt, können Sie Folgendes tun:

 $option = get_option( 'option_name', $default ) echo ( empty( $option ) ? 'default' : $option ); 

Die function empty () überprüft, ob es sich bei dem zurückgegebenen Wert um eine leere Zeichenfolge oder um eine leere Zeichenfolge handelt (Boolesch, Ganzzahl, Null usw.). Sie können mehr hier lesen: http://php.net/manual/pt_BR/function.empty.php

Auf diese Weise wird immer ein Standardwert verwendet, wenn die Option vorhanden ist.

Hinweis: Es ist eine bewährte 'type' => 'theme_mod' beim Erstellen von Mods für Designs zu verwenden, nicht 'type' => 'option' . Wenn Sie diesen Arg nicht angeben, lautet der Standardwert theme_mod.

Danke @Felipe für Erklärung & @westonruter für die Bereitstellung der Lösung im Wesentlichen .

Lösung: Erstellen Sie das defaults Array und verwenden Sie es in Customizer & am Frontend .

Schritt-1: Theme Standard-Array registrieren.

 if ( ! function_exists( 'my_theme_defaults' ) ) { function my_theme_defaults() { return array( 'option-1' => 1, 'option-2' => 'author', 'option-3' => '#3a3a3a', 'option-4' => 'ALL RIGHT RESERVED' 'option-5' => get_template_directory_uri() . '/assets/images/logo-black.png' ); } } 

Setp-2 : Zugriff in Customizer & FrontEnd.

Zugriff in Customizer

 // Get theme default values $theme_defaults = my_theme_defaults(); ... $wp_customize->add_setting( 'my-theme-options[option-1]', array( 'default' => $theme_defaults['option-1'], ... ) ); ... $wp_customize->add_setting( 'my-theme-options[option-2]', array( 'default' => $theme_defaults['option-2'], ... ) ); ... 

Zugriff auf das Frontend

 // Get theme stored values // Note: I use the `'type' => 'option',` for all the options. So, Getting stored values of option 'my-theme-options' using `get_option()`. You can use `get_theme_mod()` if you use it for `add_settings()`. $theme_stored = get_option( 'my-theme-options' ); // Get theme default values $theme_defaults = my_theme_defaults(); // Merge both $theme_options = wp_parse_args( $theme_stored, $theme_defaults ); // Access option value // eg echo $theme_options['option-1']; echo $theme_options['option-2']; echo $theme_options['option-3']; 

HINWEIS: Vergessen Sie nicht, Filter zu verwenden, wo immer es möglich ist, sie in Zukunft zu erweitern. Fügen Sie auch Textübersetzungen hinzu.

Sehr einfache Lösung, probier es aus. Hoffnung Es wird dir helfen.

Verwenden Sie diesen Code einfach in Ihrem Frontend.

Aus Ihrem eigenen Verzeichnis-

 Google 

Von Online-Link-

 Google 

Vielen Dank
BanyanTheme von Jilani Ahmed