Disons que j'ai trois sections dans Wordpress Customizer. Je mets en file d'attente le fichier js avec l'action admin_enqueue_scripts
(dois-je le mettre en file d'attente avec customize_controls_enqueue_scripts
?)
Je crée un tableau en utilisant get_option('section_names')
, puis en utilisant foreach loop
pour créer les trois sections.
dans le fichier js, j'utilise la fonction sortable('serialize')
de jquery UI et j'envoie le nouvel ordre des sections en utilisant ajax dans un fichier php. Ce fichier php utilise ensuite update_option('option_name', $_POST['list_items'])
pour mettre à jour la base de données.
La base de données est donc mise à jour chaque fois que le changement dans l'ordre des sections se produit. Mais ce que je veux, c’est que le changement permanent (changement de base de données) devrait se produire en cliquant sur le bouton Publier. Quelle est la procédure?
Voici le code ci-dessous utilisé pour renseigner les sections dans le programme de personnalisation (la boîte à outils kirki est utilisée):
$sortable_sections = get_option('sortable_sections');
foreach ($sortable_sections as $sortable_section) {
Kirki::add_section( $sortable_section, array(
'title' => esc_attr__( strtoupper($sortable_section), 'airspace' ),
'description' => esc_attr__( 'Insert content about this section', 'airspace' ),
'panel' => 'frontpage_panel',
) );
}
Lorsque vous ajoutez un nouveau champ à personnaliser, WordPress gère la manière dont les valeurs sont enregistrées, extraites, prévisualisées.
Il n'est alors pas nécessaire de sauvegarder la valeur avec un appel AJAX.
Vous devez simplement ajouter le nouveau champ qui stocke les commandes de sections. Ensuite, avec JavaScript, vous modifiez la valeur de ce champ et utilisez field.trigger("change")
pour envoyer la modification.
Vous pouvez également utiliser une classe personnalisée pour ce champ:
https://developer.wordpress.org/themes/customize-api/customizer-objects/#core-custom-controls