Registrieren mehrerer Seitenleisten mit Daten aus einem Array

Ich versuche, Seitenleisten für bestimmte Seiten dynamisch zu registrieren. Die Seiten müssen die folgenden Kriterien erfüllen:

  • veröffentlicht werden
  • Sei eine Seite (kein Beitrag)
  • Benutze die Vorlage ‘template-generic-sidebar’

In meiner functions.php habe ich mit get_pages() ein kurzes Skript get_pages() welches eine Liste aller Seiten enthält. Es zählt, wie viele dieser Seiten die obigen Kriterien erfüllen, und speichert die erforderlichen Informationen in einem Array namens $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); } } 

In meinem Testfall die erforderliche Anzahl der Seitenleisten in $counter = 3 gespeichert. In meinem Testfall sieht $sidebars_required so aus:

 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" } } 

Aber ich bin dabei, die korrekte Anzahl der Seitenleisten mit jeweils unterschiedlichem Namen zu registrieren, da ich nicht weiß, wie ich mein Array korrekt durchlaufen kann, um die Liste der $args zu erstellen, die für register_sidebar()

Ich habe bereits $counter bereit, um die von register_sidebars() benötigte number anzugeben:

 register_sidebars($counter); 

Aber wie kann ich meine $args mit dem page_name aus meinem Array erstellen? Wie durchlaufe ich dieses Array, benutze es aber, um die $args für register_sidebars() $args

Ich bin verwirrt, wie register_sidebars die register_sidebars mehrerer Seitenleisten zulässt, wenn mehrere Listen von Argumenten nicht berücksichtigt werden können.

Ich stelle mir so etwas vor:

 $args = array( 'name' => __($sidebars_required[0]['title'].'sidebar'), 'id' => 'sidebar-'.$sidebars_required[0][slug], 'before_widget' => '
  • ', 'after_widget' => '
  • ', 'before_title' => '

    ', 'after_title' => '

    ' );

    Im obigen Beispiel wäre der Name der Seitenleiste zB About Us Sidebar und die ID wäre sidebar-about-us

    Aber offensichtlich, weil es nur eine $args Liste gibt, gibt es keine Möglichkeit, dies für 3 verschiedene Seitenleisten mit unterschiedlichen Namen korrekt zu registrieren. Ich kann nur drei identische Seitenleisten erstellen.

    Solutions Collecting From Web of "Registrieren mehrerer Seitenleisten mit Daten aus einem Array"

    Ich habe es geschafft, das selbst zu lösen. Anstatt register_sidebars() zu verwenden, um die Seitenleisten alle zusammen zu registrieren, habe ich einfach die Singular register_sidebar() in einer for-Schleife verwendet, so dass es eine Seitenleiste für jede passende Seite registriert hat.

    Alles, was Sie tun müssen, um dies zum Laufen zu bringen, ist, den Template-Namen (in meinem Fall template-generic-sidebar ) in ihren eigenen Template-Slug / Name zu ändern und diesen Code in 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' => '
  • ', 'after_widget' => '
  • ', 'before_title' => '

    ', 'after_title' => '

    ' ); register_sidebar($args); }