J'essaie d'enregistrer dynamiquement les barres latérales pour certaines pages. Les pages doivent répondre aux critères suivants:
Dans mon functions.php, j'ai créé un court script en utilisant get_pages()
qui obtient une liste de toutes les pages. Il compte le nombre de pages correspondant aux critères ci-dessus et stocke les informations requises à leur sujet dans un tableau appelé $sidebars_required
:
$get_pages_args = array(
'post_type' => 'page',
'post_status' => 'publish'
);
$all_pages = get_pages($get_pages_args);
$counter = 0;
$sidebars_required = array();
foreach($all_pages as $page){
$page_id = $page->ID;
$page_template = get_page_template_slug($page_id);
if (strpos($page_template,'template-generic-sidebar') !== false) {
$counter++;
$page_details = array(
"ID" => $page_id,
"title" => $page->post_title,
"slug" => $page->post_name,
);
array_Push($sidebars_required,$page_details);
}
}
Dans mon cas de test, le nombre requis de barres latérales stockées dans $counter
= 3
. Dans mon cas de test, $sidebars_required
ressemble à ceci:
array(3) {
[0]=>
array(3) {
["ID"]=>
int(27)
["title"]=>
string(8) "About Us"
["slug"]=>
string(8) "about-us"
}
[1]=>
array(3) {
["ID"]=>
int(13)
["title"]=>
string(20) "Generic Page Example"
["slug"]=>
string(20) "generic-page-example"
}
[2]=>
array(3) {
["ID"]=>
int(15)
["title"]=>
string(9) "Resources"
["slug"]=>
string(9) "resources"
}
}
$args
requise pour register_sidebar()
.J'ai déjà $counter
prêt à spécifier la number
requise par register_sidebars()
:
register_sidebars($counter);
Mais comment puis-je créer mon $args
en utilisant le page_name
de mon tableau? Comment puis-je parcourir ce tableau, mais l'utiliser pour remplir le $args
pour register_sidebars()
Je ne comprends pas comment register_sidebars
permet d'enregistrer plusieurs barres latérales alors que plusieurs listes d'arguments ne sont pas incluses.
J'envisage quelque chose comme ceci:
$args = array(
'name' => __($sidebars_required[0]['title'].'sidebar'),
'id' => 'sidebar-'.$sidebars_required[0][slug],
'before_widget' => '<li id="%1$s" class="widget %2$s">',
'after_widget' => '</li>',
'before_title' => '<h2 class="widgettitle">',
'after_title' => '</h2>'
);
Donc dans ce qui précède, le nom de la barre latérale serait par exemple About Us Sidebar
et son identifiant serait sidebar-about-us
Mais comme il n’existe qu’une seule liste $args
, il n’existe aucun moyen de l’enregistrer correctement pour 3 barres latérales différentes portant des noms différents. Je ne peux créer que trois barres latérales identiques.
J'ai réussi à résoudre ce problème moi-même. Au lieu d'utiliser register_sidebars()
pour enregistrer toutes les barres latérales, j'ai simplement utilisé le singulier register_sidebar()
dans une boucle for, de sorte qu'il enregistre une barre latérale pour chaque page correspondante.
Tout ce qu'il faudrait faire pour que cela fonctionne est de changer le nom du modèle (dans mon cas, template-generic-sidebar
) en son propre modèle slug/name et de placer ce code dans functions.php
$get_pages_args = array(
'post_type' => 'page',
'post_status' => 'publish'
);
$all_pages = get_pages($get_pages_args);
$counter = 0;
$sidebars_required = array();
foreach($all_pages as $page){
$page_id = $page->ID;
$page_template = get_page_template_slug($page_id);
if (strpos($page_template,'template-generic-sidebar') !== false) {
$counter++;
$page_details = array(
"title" => $page->post_title,
"slug" => $page->post_name,
);
array_Push($sidebars_required,$page_details);
}
}
for ($i = 1; $i <= $counter; $i++) {
$array_counter = $i-1;
$args = array(
'name' => __($sidebars_required[$array_counter]['title'].' sidebar'),
'id' => 'sidebar-'.$sidebars_required[$array_counter]['slug'],
'before_widget' => '<li id="%1$s" class="widget %2$s">',
'after_widget' => '</li>',
'before_title' => '<h2 class="widgettitle">',
'after_title' => '</h2>'
);
register_sidebar($args);
}