Beim Erstellen einer Customize-Section wird ein Titel vergeben. In einigen Fällen kann es sein, dass dieser Titel während einer Customize-Session dynamisch verändert werden soll, um beispielsweise den veränderten Wert eines Formularfeldes wiederzugeben, wie unten im GIF zu sehen ist.
Ich habe keine Möglichkeit gefunden den Titel über die Customize-JS-API zu verändern, also blieb nur der Weg über die direkte Manipulation des DOM.
Den Titel einer Section in der Detailansicht (also wie oben im GIF) können wir wie folgt ansprechen:
document.querySelector('#sub-accordion-section-sectionId .customize-section-title h3').lastChild.textContent
Code-Sprache: JavaScript (javascript)
Und den Section-Titel in der Panel-Ansicht so:
document.querySelector('#accordion-section-sectionId .accordion-section-title').childNodes[0].textContent
Code-Sprache: JavaScript (javascript)
Um das Verhalten aus dem GIF umzusetzen, benötigen wir den folgenden Code:
;(function (api) {
api.bind('ready', function () {
// Listen to changes of the page control value to update the page title in the section head and section title.
api.control('portfolio_category_page[1][id]', function (control) {
control.setting.bind(function () {
var sectionTitle= 'No page selected';
// Build the title for the section.
if ('0' !== api.control('portfolio_category_page[1][id]').setting.get() && '' !== api.control('portfolio_category_page[1][id]').setting.get()) {
// Get the page title.
var pageSelectElem = document.querySelector('#customize-control-portfolio_category_page-1-id select');
if (-1 !== pageSelectElem.selectedIndex) {
sectionTitle= '»' + pageSelectElem.options[pageSelectElem.selectedIndex].text.trim() + '«';
}
}
// Add the page title to the section.
document.querySelector('#accordion-section-hannover_portfolio_category_page_section\\[1\\] .accordion-section-title').childNodes[0].textContent = sectionTitle;
document.querySelector('#sub-accordion-section-hannover_portfolio_category_page_section\\[1\\] .customize-section-title h3').lastChild.textContent = sectionTitle;
});
});
});
})(wp.customize);
Code-Sprache: JavaScript (javascript)
Wir lauschen auf Veränderungen des Settings der portfolio_category_page[1][id]
-Control und prüfen dann, ob der »leere« Select-Wert oder eine Seite ausgewählt wurde (über selectedIndex
haben wir Zugriff auf den ausgewählten Wert eines Select-Elements). Falls eine Seite ausgewählt wurde, speichern wir deren Titel in einer Variable und setzen ihn als Wert für die beiden Vorkommen des Section-Titels.