Wie man Admins erlaubt, eine Seitenleiste vom Admin zu erstellen

Ich erstelle ein WordPress-Theme und ich habe festgestellt, dass viele Premium-Themes den Benutzern erlauben, zu Appearance-> Sidebars zu gehen und eine neue Sidebar zu erstellen, indem sie einfach einen Namen vergeben. Der Benutzer kann dann zu Widgets gehen und dieser Seitenleiste verschiedene Widgets zuweisen sowie benutzerdefinierte Menüs hinzufügen. Dies ist meiner Meinung nach ein großartiges Feature, da es Benutzern ermöglicht, verschiedene Seitenleisten auf verschiedenen Seiten zu haben.

Jetzt kenne ich die benutzerdefinierten Post-Typ- und -Themen-Optionen und weiß, wie ich die Leute eine andere Seitenleiste für verschiedene Seiten auswählen lassen würde, aber ich habe nur Probleme beim Erstellen des ersten Schritts, der es Leuten ermöglicht, eine Seitenleiste zu erstellen ihre eigenen. Muss ich dafür einen CPT erstellen? oder gibt es einen anderen Weg?

Ich habe viel gesucht und am besten bin ich auf ein Plugin gestoßen, das viel Code hat und zu viele Dinge macht und für das ich nicht einmal die Lizenzinformationen finden kann.

Also bitte Ratschläge, wie ich sowas erstellen kann und vielen Dank.

Solutions Collecting From Web of "Wie man Admins erlaubt, eine Seitenleiste vom Admin zu erstellen"

Erstellen Sie eine function, die Seitenleisten mit register_sidebar , beginnend mit einer Option:

 add_action('widgets_init', 'my_custom_sidebars'); function my_custom_sidebars() { $sidebars = get_option('my_theme_sidebars'); // get all the sidebars names if ( ! empty($sidebars) ) { // add a sidebar for every sidebar name foreach ( $sidebars as $sidebar ) { if ( empty($sidebar) ) continue; register_sidebar(array( 'name' => $sidebar, 'id' => sanitize_title($sidebar), 'before_title' => '

', 'after_title' => '

' )); } } }

Jetzt müssen Sie eine Option 'my_theme_sidebars' , die ein Array von Sidebar-Namen enthält. Hier poste ich den Code, der eine Seite mit 10 Texteingaben erstellt, wo der Name der Seitenleiste hinzugefügt wird. (Ich benutze add_theme_page ) Sie können es verbessern, indem Sie dynamischen Feldern JavaScript hinzufügen.

 add_action('admin_menu', 'my_custom_sidebars_page'); function my_custom_sidebars_page() { add_theme_page( 'Sidebars', 'Sidebars', 'edit_theme_options', 'my_custom_sidebars', 'my_custom_sidebars_page_print' ); // save the form if submitted $nonce = filter_input(INPUT_POST, 'my_custom_sidebars_nonce', FILTER_SANITIZE_STRING); if ( ! empty($nonce) && wp_verify_nonce($nonce, 'my_custom_sidebars') ) { $sidebars = (array) $_POST['custom_sidebars']; update_option('my_theme_sidebars', $sidebars); add_action('admin_notices', 'my_custom_sidebars_notice'); } } function my_custom_sidebars_page_print() { if (! current_user_can('edit_theme_options') ) return; ?> 

Sidebars

< ?php } function my_custom_sidebars_notice() { echo '

Updated.

'; }

Jetzt können Sie die Seitenleisten für eine bestimmte Seite auswählen. Sie können eine Metabox dafür hinzufügen. (Siehe Dokumentation zu add_meta_box ).

 add_action( 'add_meta_boxes', 'my_custom_sidebar_metabox' ); function my_custom_sidebar_metabox() { $screens = array( 'post', 'page' ); // add the metabox for pages and post foreach ( $screens as $screen ) { add_meta_box('my_custom_sidebar', 'Select a Sidebar','my_custom_sidebar_box', $screen); } } function my_custom_sidebar_box( $post ) { $sidebars = get_option('my_theme_sidebars'); // get all the sidebars names if ( empty($sidebars) ) { echo 'No custom sidebars registered.'; return; } wp_nonce_field( 'my_custom_sidebar', 'my_custom_sidebar_box_nonce' ); $value = get_post_meta( $post->ID, '_custom_sidebar', true ); // actual value echo ' '; echo ' 

Fügen Sie dann die function zum Speichern der Metabox hinzu:

 add_action( 'save_post', 'my_custom_sidebar_metabox_save' ); function my_custom_sidebar_metabox_save( $post_id ) { // If this is an autosave, our form has not been submitted, do nothing. if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; // check nonce $nonce = filter_input(INPUT_POST, 'my_custom_sidebar_box_nonce', FILTER_SANITIZE_STRING); if ( empty($nonce) || ! wp_verify_nonce( $nonce, 'my_custom_sidebar' ) ) return; $type = get_post_type($post_id); // Check the user's permissions. $cap = ( 'page' === $type ) ? 'edit_page' : 'edit_post'; if ( ! current_user_can( $cap, $post_id ) ) return; $custom = filter_input(INPUT_POST, 'custom_sidebar', FILTER_SANITIZE_STRING); // Update the meta field in the database. if ( empty($custom) ) { delete_post_meta( $post_id, '_custom_sidebar'); } else { update_post_meta( $post_id, '_custom_sidebar', $custom ); } } 

Auf diese Weise können Ihre Benutzer eine benutzerdefinierte Seitenleiste für jeden Post oder jede Seite auswählen. Es wird im Meta-Feld ‘ _custom_sidebar' .

Um die benutzerdefinierte Sidebar sidebar.php sollte Ihre sidebar.php enthalten:

 // change the following according to your defaults sidebar if exists $sidebar = 'main_sidebar'; // if in singular post/page check for saved custom sidebar if ( is_singular() ) { $id = get_queried_object_id(); // get current post/page id $custom = get_post_meta( $id, '_custom_sidebar', true ); // get selected sidebar if ( ! empty($custom) ) $sidebar = $custom; } if ( is_active_sidebar( $sidebar ) ) { ?>  < ?php } ?> 

Schließlich in Ihren Seiten und Posts rufen get_sidebar(); einfach get_sidebar(); wie gewöhnlich.

CODE AKTUALISIERT MIT = UNBEGRENZTE SIDEBARS HINZUFÜGEN (JavaScript)

Erstellen Sie eine function, die Seitenleisten mit [ register_sidebar ] [1] beginnt, beginnend mit einer Option:

 add_action('widgets_init', 'my_custom_sidebars'); function my_custom_sidebars() { $sidebars = get_option('my_theme_sidebars'); // get all the sidebars names if ( ! empty($sidebars) ) { // add a sidebar for every sidebar name foreach ( $sidebars as $sidebar ) { if ( empty($sidebar) ) continue; register_sidebar(array( 'name' => $sidebar, 'id' => sanitize_title($sidebar), 'before_title' => '

', 'after_title' => '

' )); } } }

AKTUALISIERT: Jetzt müssen Sie eine Option 'my_theme_sidebars' , die ein Array von Sidebar-Namen enthält. Hier poste ich den Code, der eine Seite mit 10 Texteingaben erstellt, wo der Name der Seitenleiste hinzugefügt wird. (Ich benutze [ add_theme_page ] [2]) Sie können es verbessern, indem Sie dynamische Felder zum Hinzufügen von Javascript hinzufügen. Fügen Sie eine unbegrenzte Seitenleiste admin hinzu.

 add_action( 'admin_menu', 'my_sidebar_plugin_menu' ); function my_sidebar_plugin_menu() { add_theme_page( 'sidebar Plugin Options', 'Add Sidebar', 'manage_options', 'my-sidebar-unique-identifier', 'my_sidebar_plugin_options' ); $nonce = filter_input(INPUT_POST, 'my_custom_sidebars_nonce', FILTER_SANITIZE_STRING); if ( ! empty($nonce) && wp_verify_nonce($nonce, 'my_custom_sidebars') ) { $sidebars = (array) $_POST['custom_sidebars']; update_option('my_theme_sidebars', $sidebars); add_action('admin_notices', 'my_custom_sidebars_notice'); } } function my_sidebar_plugin_options() { wp_enqueue_script('jquery'); wp_enqueue_script('custom_sidebar-js', get_template_directory_uri() . '/js/custom_sidebar.js'); if ( !current_user_can( 'manage_options' ) ) { wp_die( __( 'You do not have sufficient permissions to access this page.' ) ); } ?> 

Add Custom Sidebars

< ?php } function my_custom_sidebars_notice() { echo '

Sidebar(s) Updated.

'; }

Jetzt können Sie die Seitenleisten für eine bestimmte Seite auswählen. Sie können eine Metabox dafür hinzufügen. (Siehe [ add_meta_box ] [3] Dokumente).

 add_action( 'add_meta_boxes', 'my_custom_sidebar_metabox' ); function my_custom_sidebar_metabox() { $screens = array( 'post', 'page' ); // add the metabox for pages and post foreach ( $screens as $screen ) { add_meta_box('my_custom_sidebar', 'Select a Sidebar','my_custom_sidebar_box', $screen); } } function my_custom_sidebar_box( $post ) { $sidebars = get_option('my_theme_sidebars'); // get all the sidebars names if ( empty($sidebars) ) { echo 'No custom sidebars registered.'; return; } wp_nonce_field( 'my_custom_sidebar', 'my_custom_sidebar_box_nonce' ); $value = get_post_meta( $post->ID, '_custom_sidebar', true ); // actual value echo ' '; echo ' 

Fügen Sie dann die function zum Speichern der Metabox hinzu:

 add_action( 'save_post', 'my_custom_sidebar_metabox_save' ); function my_custom_sidebar_metabox_save( $post_id ) { // If this is an autosave, our form has not been submitted, do nothing. if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; // check nonce $nonce = filter_input(INPUT_POST, 'my_custom_sidebar_box_nonce', FILTER_SANITIZE_STRING); if ( empty($nonce) || ! wp_verify_nonce( $nonce, 'my_custom_sidebar' ) ) return; $type = get_post_type($post_id); // Check the user's permissions. $cap = ( 'page' === $type ) ? 'edit_page' : 'edit_post'; if ( ! current_user_can( $cap, $post_id ) ) return; $custom = filter_input(INPUT_POST, 'custom_sidebar', FILTER_SANITIZE_STRING); // Update the meta field in the database. if ( empty($custom) ) { delete_post_meta( $post_id, '_custom_sidebar'); } else { update_post_meta( $post_id, '_custom_sidebar', $custom ); } } 

Auf diese Weise können Ihre Benutzer eine benutzerdefinierte Seitenleiste für jeden Post oder jede Seite auswählen. Es wird im Meta-Feld ‘ _custom_sidebar' .

Um die benutzerdefinierte Sidebar sidebar.php sollte Ihre sidebar.php enthalten:

 // change the following according to your defaults sidebar if exists $sidebar = 'main_sidebar'; // if in singular post/page check for saved custom sidebar if ( is_singular() ) { $id = get_queried_object_id(); // get current post/page id $custom = get_post_meta( $id, '_custom_sidebar', true ); // get selected sidebar if ( ! empty($custom) ) $sidebar = $custom; } if ( is_active_sidebar( $sidebar ) ) { ?>  < ?php } ?> 

Schließlich in Ihren Seiten und Posts rufen get_sidebar(); einfach get_sidebar(); wie gewöhnlich.

AKTUALISIERT: Erstellen Sie eine neue JavaScript-Datei für mehrere Seitenleisten js / custom_sidebar.js

 ( function( $ ) { $('.my-form .add-box').click(function(){ var n = $('.text-box').length + 1; var box_html = $('

Remove

'); box_html.hide(); $('#append').append(box_html); box_html.fadeIn('slow'); return false; }); $('.my-form').on('click', '.remove-box', function(){ $(this).parent().css( 'background-color', '#FF6C6C' ); $(this).parent().fadeOut("slow", function() { $(this).remove(); $('.box-number').each(function(index){ $(this).text( index + 1 ); }); }); return false; }); $('.clsSubmit').click(function(){ var m = $('.text-box').length; if(m==0){alert("press OK to Reset");} });

Schließlich in Ihren Seiten und Posts rufen get_sidebar(); einfach get_sidebar(); wie gewöhnlich.