¿Cómo permiten que los administradores crear un panel lateral desde el admin

Estoy creando un tema para WordPress y me he dado cuenta que un montón de temas premium permite a los usuarios ir a apariencia > barras laterales y crear una nueva barra lateral por simplemente dándole un nombre. El usuario puede entonces ir a widgets y asignar diferentes widgets a esta barra lateral y también agregar menús personalizados. Creo que es una gran característica que permite a los usuarios a tener diferentes barras laterales en las diferentes páginas.

Ahora estoy familiarizado con opciones Tipo Custom y el tema y saber cómo dejaría la gente elige un sidebar diferente para diferentes páginas, pero estoy teniendo problemas en el primer paso, que consiste en permitir a la gente crear una barra lateral en su propia creación. ¿necesito crear un CPT para esto? ¿o hay alguna otra forma? He buscado mucho y lo que mejor me topé con un plugin, que tiene un montón de código y hace muchas cosas y por que no puedo ni encontrar la información de la licencia.

Por favor, consejos de cómo puedo crear algo así y gracias mucho..


Solución

Crear una función que registran las barras laterales, utilizando register_sidebar, a partir de una opción:
register_sidebar
Ahora tienes que salvar una opción
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' => '<h1>',
          'after_title' => '</h1>'
        ));
    }
  }
}
que contiene una matriz de nombre de las barras laterales. Aquí estoy post publicar el código que crea una página con 10 entradas de texto donde agregar el nombre de la barra lateral. (Utilizare add_theme_page) Se puede mejorarlo añadir javascript dinámico para agregar campos de...

'my_theme_sidebars'
Ahora, tienes que permiten a los usuarios seleccionar las barras laterales para una página específica. Usted puede agregar un metabox para eso.

(Véase add_meta_box docs).
add_theme_page
Luego agregar la función para guardar la metabox:
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;
  ?>
  <div class="wrap">
    <h2>Sidebars</h2>
    <form id="sidebars" method="post">
    <?php
    wp_nonce_field('my_custom_sidebars', 'my_custom_sidebars_nonce');
    $saved = get_option('my_theme_sidebars');
    for ($i=0; $i<10; $i++) {
      $value = isset( $saved[$i] ) ? esc_attr($saved[$i]) : '';
    ?>
    <input type="text" name="custom_sidebars[]" value="<?php echo $value;?>" />
    <?php } ?>
    <p class="submit">
      <input name="submit" class="button button-primary" value="Save" type="submit">
    </p>
    </form>
  </div>
  <?php
}

function my_custom_sidebars_notice() {
  echo '<div class="updated"><p>Updated.</p></div>';
}
'
add_meta_box
.

Para mostrar la barra lateral de encargo, tu
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 '<label>Select a Sidebar</label> ';
  echo '<select name="custom_sidebar">';
  // default option
  echo '<option value=""' . 

selected('', $value, false) . '>Default</option>'; // an option for every sidebar foreach ($sidebars as $sidebar) { if ( empty($sidebar) ) continue; $v = sanitize_title($sidebar); $n = esc_html($sidebar); echo '<option value="' .

$v . '"' .

selected($v, $value) .'>' .$n .'</option>'; } echo '<select>'; }
debe contener algo como:
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 );
  }
}
Por último en tus páginas y entradas solo llame
_custom_sidebar'
como de costumbre..




Problemas relacionados

Sólo se permiten los administradores y editores para acceder wp admin

Mostrar Panel de bienvenida en tablero de instrumentos para cada usuario

¿Acceso directo a la edición de widget\/barra lateral en el menú admin?

Panel de administración de Wordpress dinámico

¿Cómo permiten a los usuarios seguir un post y luego permiten que los administradores a todos los usuarios que han seguido ese mensaje de correo electrónico?

¿Es posible que permiten que los administradores de grupo BP establecer qué menú les gustaría tener como su página de inicio predeterminada?

Capacidad para leer o modificar página en wp admin sólo para administradores

Crear múltiples Admin Widget página con llamar a una barra lateral

Panel de carga personalizado en la barra de menús

Mantener conectado en los usuarios de Panel de administración

plugin para publicar de admin en flickr

crear una barra lateral izquierda en prensa palabra

Source: Stack Exchange Inc; License: cc by-sa 3.0 Contacto / Contact