Sidebar-Generator? :)

Ich habe es satt, die functions.php jedes Mal zu bearbeiten, wenn ich eine Sidebar hinzufügen / entfernen möchte.

Ich weiß, dass es Sidebar Generator Plugin gibt , aber ich wollte etwas selbst entwickeln, das ohne Plugins funktionieren wird.

Wie auch immer, ich weiß bereits, wie man alle Seitenleisten auflistet, wie man sie registriert und entfernt, aber ich bin nicht sicher, wie man das automatisch von der Options-Seite macht (ich habe natürlich schon eine).

Ich habe den Code des Plugins analysiert, aber mein PHP ist schlecht, also verstehe ich die Hälfte davon nicht oder noch mehr.

Vielleicht hat jemand hier einen eigenen Sidebar-Generator entwickelt und kann mir bei den Grundlagen helfen, wie man neue Sidebars mit $ _POST etc. registrieren kann?

Ich habe über fopen nachgedacht (“functions.php”, “r +”), aber ich bin mir nicht sicher über diese Methode, denn es könnte sogar die ganze functions.php Datei auslöschen, wenn sie falsch verwendet wird, könnte die Suche nach bereits registrierten Widgets sein schmerzhaft auch.

Ich glaube, es wäre sehr nützlich, so etwas zu haben, und das ist merkwürdig, dass es in WP keinen eingebauten Sidebar-Generator gibt.

Solutions Collecting From Web of "Sidebar-Generator? :)"

Der Code für dieses Plugin ist eigentlich ziemlich einfach. Die init-function durchläuft alle Sidebars (gespeichert in der wp_options-Tabelle) und registriert sie in WordPress:

< ?php function init(){ //go through each sidebar and register it $sidebars = sidebar_generator::get_sidebars(); if(is_array($sidebars)){ foreach($sidebars as $sidebar){ $sidebar_class = sidebar_generator::name_to_class($sidebar); register_sidebar(array( 'name'=>$sidebar, 'before_widget' => '
  • ', 'after_widget' => '
  • ', 'before_title' => '

    ', 'after_title' => '

    ', )); } } } ?>

    Die Seitenleisten werden mit den Methoden add_sidebar () und remove_sidebar () hinzugefügt bzw. entfernt. Der $ _POST [‘sidebar_name’] wird in der Variablen $ name als Name der Seitenleisten gespeichert:

     < ?php function add_sidebar(){ $sidebars = sidebar_generator::get_sidebars(); $name = str_replace(array("\n","\r","\t"),'',$_POST['sidebar_name']); $id = sidebar_generator::name_to_class($name); if(isset($sidebars[$id])){ die("alert('Sidebar already exists, please use a different name.')"); } $sidebars[$id] = $name; sidebar_generator::update_sidebars($sidebars); $js = " var tbl = document.getElementById('sbg_table'); var lastRow = tbl.rows.length; // if there's no header row in the table, then iteration = lastRow + 1 var iteration = lastRow; var row = tbl.insertRow(lastRow); // left cell var cellLeft = row.insertCell(0); var textNode = document.createTextNode('$name'); cellLeft.appendChild(textNode); //middle cell var cellLeft = row.insertCell(1); var textNode = document.createTextNode('$id'); cellLeft.appendChild(textNode); //var cellLeft = row.insertCell(2); //var textNode = document.createTextNode('[Remove]'); //cellLeft.appendChild(textNode) var cellLeft = row.insertCell(2); removeLink = document.createElement('a'); linkText = document.createTextNode('remove'); removeLink.setAttribute('onclick', 'remove_sidebar_link(\'$name\')'); removeLink.setAttribute('href', 'javacript:void(0)'); removeLink.appendChild(linkText); cellLeft.appendChild(removeLink); "; die( "$js"); } function remove_sidebar(){ $sidebars = sidebar_generator::get_sidebars(); $name = str_replace(array("\n","\r","\t"),'',$_POST['sidebar_name']); $id = sidebar_generator::name_to_class($name); if(!isset($sidebars[$id])){ die("alert('Sidebar does not exist.')"); } $row_number = $_POST['row_number']; unset($sidebars[$id]); sidebar_generator::update_sidebars($sidebars); $js = " var tbl = document.getElementById('sbg_table'); tbl.deleteRow($row_number) "; die($js); } ?> 

    Die Seitenleisten werden mit der Methode get_sidebar in das Thema geladen und registriert

     < ?php function get_sidebar($name="0"){ if(!is_singular()){ if($name != "0"){ dynamic_sidebar($name); }else{ dynamic_sidebar(); } return;//dont do anything } global $wp_query; $post = $wp_query->get_queried_object(); $selected_sidebar = get_post_meta($post->ID, 'sbg_selected_sidebar', true); $selected_sidebar_replacement = get_post_meta($post->ID, 'sbg_selected_sidebar_replacement', true); $did_sidebar = false; //this page uses a generated sidebar if($selected_sidebar != '' && $selected_sidebar != "0"){ echo "\n\n\n"; if(is_array($selected_sidebar) && !empty($selected_sidebar)){ for($i=0;$i"; dynamic_sidebar();//default behavior $did_sidebar = true; break; }elseif($name == "0" && $selected_sidebar[$i] == "0"){ //we are replacing the default sidebar with something //echo "\n\n"; dynamic_sidebar($selected_sidebar_replacement[$i]);//default behavior $did_sidebar = true; break; }elseif($selected_sidebar[$i] == $name){ //we are replacing this $name //echo "\n\n"; $did_sidebar = true; dynamic_sidebar($selected_sidebar_replacement[$i]);//default behavior break; } //echo "\n"; } } if($did_sidebar == true){ echo "\n\n\n"; return; } //go through without finding any replacements, lets just send them what they asked for if($name != "0"){ dynamic_sidebar($name); }else{ dynamic_sidebar(); } echo "\n\n\n"; return; }else{ if($name != "0"){ dynamic_sidebar($name); }else{ dynamic_sidebar(); } } } ?> 

    Wir laden das Sidebar-Array tatsächlich aus der Tabelle wp_options mit folgendem:

     < ?php function get_sidebars(){ $sidebars = get_option('sbg_sidebars'); return $sidebars; } ?> 

    Dieser Code ist wirklich ziemlich einfach, sobald Sie PHP kennen, also kann ich vorschlagen, ein wenig Zeit zu nehmen, um sich damit vertrauter zu machen? Es ist wirklich eine großartige Fähigkeit zu haben. Hoffentlich hilft Ihnen das, in die richtige Richtung zu weisen.