web-dev-qa-db-fra.com

Comment ajouter un paramètre de personnalisation dans un thème enfant

J'aimerais ajouter une option au personnaliseur de mon thème enfant, mais je rencontre des difficultés pour l'implémenter. Je suis à peu près sûr que mon problème est lié au nom des arguments que j'appelle, mais je ne le sais pas. Si vous voyez autre chose, n'hésitez pas à me dire ce que vous pensez.

Ce que je soupçonne est faux:

  1. Je ne sais pas quels arguments dans mon functions.php devraient avoir le nom du thème enfant (par exemple, child_theme_name/tesseract-child) et le titre du thème parent (par exemple, parent_theme_name/tesseract). Normalement, je suppose que je devrais toujours utiliser le nom du thème enfant, mais la déclaration pour les panneaux du fichier customizer.php du thème parent inclut le nom du thème parent (tesseract_footer_options), et je ne suis pas sûr que WordPress modifie ce nom lors de l'utilisation de thèmes enfants. Par exemple, le premier argument de add_section dans un thème enfant doit-il être parent_theme_name_footer_options ou child_theme_name_footer_options

  2. Si je suis censé utiliser le nom d'un thème enfant, je ne sais pas comment. Lorsque j'essaie de nommer la fonction avec une référence au nom du thème enfant (par exemple, tesseract-child_options), qui comprend des traits d'union, un message d'erreur s'affiche. Donc, je ne pense pas que php aime avoir des fonctions nommées avec des traits d'union, et en fait, j'ai lu que ce php n'autorisait pas de trait d'union dans les noms de fonctions. Un autre indice que les traits d'union sont mauvais: non seulement les traits d'un nom de thème enfant ont-ils provoqué un blocage, cela a également amené mon éditeur (texte sublime) à baliser étrangement le code. Pour vérifier si le problème était lié aux traits d'union, j'ai changé le nom de la fonction en tesseract_child_options, en utilisant tous les traits de soulignement, mais cela me semble faux, car techniquement, le nom du thème est tesseract-child avec un trait d'union, pas tesseract_child avec un trait de soulignement.

Le code

C'est la déclaration du panneau dans le fichier customizer.php du thème parent:

$wp_customize->add_panel( 'tesseract_footer_options', array(

'priority'       => 5,

'capability'     => 'edit_theme_options',

'title'          => 'Footer Options',

//'description'  => ''

) );

C'est le code que j'utilise dans le fichier function.php de mon thème pour essayer d'ajouter une section à ce panneau d'options:

add_action( 'customize_register' , 'tesseract_child_options' );

function tesseract_child_options( $wp_customize ) {

$wp_customize->add_section( 
    'tesseract_footer_options', 
    array(
        'title'       => __( 'Reblog Options', 'tesseract' ),
        'priority'    => 100,
        'capability'  => 'edit_theme_options',
        'description' => __('Change Reblog Options Here.', 'tesseract'), 
    ) 
);


$wp_customize->add_setting( 'number_of_reblogs',
    array(
        'default' => '3'
    )
);  

$wp_customize->add_control( new WP_Customize_Control( 
    $wp_customize, 
    'reblog_number_control',
    array(
        'label'    => __( 'Number of Reblogs', 'tesseract-child' ), 
        'section'  => 'tesseract_footer_options',
        'settings' => 'reblog_number',
        'type'     => 'text',
        'priority' => 10,
    ) 
));

}

Toute aide serait grandement appréciée! Merci!

MISE À JOUR SUR LA RÉPONSE DE PROSTI:

@Prosti a répondu à la question, mais je veux simplement clarifier ce qui n'allait pas pour quiconque tente de comprendre comment faire ceci:

  1. Le nom de la fonction entière appelée par l'action customize_register est arbitraire. Vous pouvez le nommer comme vous le souhaitez, à condition de ne pas inclure de trait d'union. Notez que ce nom de fonction ne doit pas doit être associé de quelque manière que ce soit au nom du thème parent ou au nom du thème enfant. Pour illustrer cela, dans mon exemple de travail (illustré ci-dessous), j'ai changé le nom de la fonction que j'avais utilisé dans ma question initiale de tesseract_child_options à childtheme_customize_register. Veuillez noter que bien que vous n'ayez pas à faire référence au thème enfant ou au nom du thème parent dans cette fonction, il s'agit néanmoins d'une bonne pratique, mais uniquement par souci de lisibilité, pas de fonctionnalité.

  2. Le nom de la section que vous créez (le premier argument de la fonction add_section) est arbitraire, vous pouvez le nommer comme vous le souhaitez. C’est une balise que WP utilisera pour le passage interne de la variable. Le texte que vous incluez dans le deuxième argument de add_section déterminera le texte à afficher lorsque vous arriverez pour la première fois dans le menu racine du personnalisateur (le premier menu qui apparaît). Là encore, les bonnes pratiques indiquent que, pour des raisons de lisibilité, utilisez un nom associé au thème.

  3. Dans les fonctions add_section et add_control, toutes les instructions à deux arguments que j'ai utilisées (par exemple, title, description et label) devaient avoir le nom exact du thème enfant comme second argument. Si le nom de ce thème enfant comporte des traits d'union (comme ce fut le cas pour le mien, par exemple tesseract-child), ce deuxième argument devrait également comporter des traits d'union.

  4. La priority de la section a déterminé où (c'est-à-dire combien haut ou bas) la section que j'ai créée se trouvait dans la liste des options. Le pied de page était la 4ème section du parent et la priorité était 5. Si je mets la priorité dans add_section, pour avoir la priorité 4, l'option est venue au-dessus du bouton d'option pied de page. Si je l'ai définie à 6, elle est tombée en dessous.

Exemple de code de travail

 
 add_action ('custom_register', 'childtheme_customize_register'); Le second argument est arbitraire, mais ne peut pas avoir de tiret car php ne les autorise pas dans les noms de fonctions. 
 
 
 
 function childtheme_customize_register ($ wp_customize) {
 
 $ wp_customize-> add_section (
 'tesseract_reblog_options', 
 array (
 'title' => __ ('Options de réenregistrement', 'tesseract- child '), // 2ème argument correspond au nom de thème enfant 
' priorité '=> 6, // place la section sous les options de pied de page dans la liste 
' capable '=>' edit_theme_options ', 
 'description' => __ ('Modifier les options de réblogging ici.', 'tesseract-child'), // Le second argument correspond au nom du thème de l'enfant 
) 
); ____.] 
 
 $ wp_customize-> add_setting ('number_of_reblogs', 
 array (
 'default' => '3' 
) 
); 
 
 $ wp_customize-> add_control ('setting_id', array (
 'label' => __ ('Nombre de Reblogs', 'tesseract-child'), // 2ème arg correspond au nom de thème enfant 
 'section' => 'tesseract_reblog_options', 
 'settings' => 'number_of_reblogs', 
 'type' => 'text', 
 'priorité' => 6 
)); 
} 
 
3
CoderScissorhands

OK, consultez le développeur de thèmes handbook .

$wp_customize->add_control( 'reblog_number_control', array(
  'label'    => __( 'Number of Reblogs', 'tesseract-child' ), 
    'section'  => 'tesseract_footer_options',
    'settings' => 'number_of_reblogs',
    'type'     => 'text',
    'priority' => 10
) );

Depuis que tu es dans le thème de l'enfant

'title'       => __( 'Reblog Options', 'tesseract' ),

devrait être

'title'       => __( 'Reblog Options', 'tesseract-child' ),

En d'autres termes, vos noms de réglage, de contrôle et de section doivent correspondre dans add_control, add_section, add_setting.

4
prosti