X

Mostrar menú de tipo de publicación personalizado como submenú

Snippets de IsItWP

¿Quieres mostrar el tipo de publicación personalizado como un submenú dentro del menú de edición de publicaciones? Si bien probablemente exista un plugin para esto, hemos creado un fragmento de código rápido que puedes usar para mostrar el menú del tipo de publicación personalizado como submenú en WordPress.

Instrucciones:

Todo lo que tienes que hacer es agregar este código al archivo functions.php de tu tema o a un plugin específico del sitio:

function nacin_register_slideshows_post_type() {
	register_post_type( 'slideshow', array(
		'labels' => array(
			'name' => 'Slideshows',
			'singular_name' => 'Slideshow',
		),
		'public' => true,
		'show_ui' => true,
		'show_in_menu' => 'edit.php',
		'supports' => array( 'title' ,'thumbnail', 'editor' ),
	) );
}
add_action( 'init', 'nacin_register_slideshows_post_type' );

Nota: Si es la primera vez que agregas fragmentos de código en WordPress, consulta nuestra guía sobre cómo agregar fragmentos de código correctamente en WordPress, para que no rompas accidentalmente tu sitio.

Si te gustó este fragmento de código, considera echar un vistazo a nuestros otros artículos en el sitio como: 43 mejores temas de fotografía para WordPress y cómo crear un formulario de contacto en WordPress.

Comentarios   Deja una respuesta

  1. Mochammad Taufiq November 26, 2013 at 2:12 am

    Registro el tipo de publicación con 'agregar nuevo elemento', pero 'agregar nuevo elemento' no aparece en el submenú, ¿alguna sugerencia para mi problema?

  2. Bien. Intentando llevar esto un paso más allá y adjuntar el tipo de publicación a una página de menú personalizada. Hasta ahora, nada... ¿alguna idea?

    1. Tu pregunta es antigua, pero supongo que esto podría ser útil para alguien más.
      Pasé mucho tiempo revisando el código fuente de WP intentando hacer lo
      mismo: tengo un menú personalizado creado usando add_menu_page(). Tiene un puñado
      de elementos de submenú. Tengo un tipo de publicación personalizado relacionado con este menú y
      quería que los enlaces de agregar/listar para ese tipo de publicación fueran elementos de submenú.

      Respuesta corta: No hay una manera fácil de hacerlo en WP. La forma en que
      genera los menús y la interfaz de usuario de tipos de publicación personalizados significa que no hay una llamada simple que
      puedas hacer.

      Solución:
      1. Registra tu tipo de publicación con las
      siguientes opciones:
      ‘show_ui’ => true,
      ‘show_in_menu’ => false
      En
      este ejemplo, mi tipo de publicación personalizado es acct_notes

      2. En el archivo functions.php de tu tema o en tu archivo de plugin, agrega una acción a
      admin_menu:
      add_action(‘admin_menu’,
      ‘modify_admin_menus’);

      3. Agrega submenu_pages para los dos enlaces de la interfaz de usuario de publicaciones — listar publicaciones, crear nueva
      publicación.
      El primer parámetro es el slug del menú al que lo estás agregando. El segundo
      es el nombre que aparecerá en la página. El tercero es cómo se mostrará el enlace.
      El cuarto es la capacidad requerida para acceder a él. El quinto es el slug
      para este elemento del menú. Y el último es la función que generará la salida. En
      este caso, no la usaremos, así que podemos pasar NULL.

      add_submenu_page(‘members’, ‘Notas de Cuenta’, ‘Notas de Cuenta’,
      ‘manage-options’, ‘view_account_notes’, NULL);

      4. El último paso es la función que cambiará esos enlaces de submenú para que
      vayan a las páginas de interfaz de usuario de publicaciones correctas.

      function modify_admin_menus(){
      global $submenu;

      if(array_key_exists(‘members’, $submenu)){

      foreach($submenu[‘members’] as $key => $value){
      $k =
      array_search(‘view_account_notes’, $value);
      if($k){

      $submenu[‘members’][$key][$k] =
      (current_user_can($submenu[‘members’][$key][1]))?
      admin_url(‘/edit.php?post_type=acct_notes’):”;
      }

      $l = array_search(‘new_account_note’, $value);

      if($l){
      $submenu[‘members’][$key][$l] =
      (current_user_can($submenu[‘members’][$key][1]))?
      admin_url(‘/post-new.php?post_type=dojo_acct_notes’) : ”;}

      }

      }

      Lo que está sucediendo en la función es que está comprobando la matriz global $submenu
      para ver si nuestro elemento de menú de nivel superior (members) existe; podría no
      existir si el usuario no tiene permiso para acceder a él. Si lo tiene, entonces
      busca si ese elemento de menú de nivel superior tiene una página de submenú con el
      slug "view_account_notes", lo que asignamos en add_submenu_page. Finalmente,
      comprueba el permiso que asignamos en add_submenu_page y si el usuario actual
      tiene ese permiso, genera el nuevo enlace. Si no lo tiene, elimina el enlace por
      completo.

      Hacemos esa misma comprobación dos veces: una para el enlace para listar nuestro
      tipo de publicación personalizado y otra para el enlace para agregar un nuevo
      tipo de publicación personalizado.

  3. Sería mucho preferible tener esta funcionalidad incorporada, pero esto le
    permitirá agregar interfaces de usuario de tipos de publicación personalizados a
    cualquier menú que desee.

    Menú Instalaciones incluye tipos de publicación: – Reuniones; – Bodas; – SPA

    Muchas gracias por la ayuda.

  4. buen truco. gracias.

    1. de nada, cuando quieras,

    2.  No es un truco, es una característica

Agrega un comentario

Nos complace que hayas elegido dejar un comentario. Ten en cuenta que todos los comentarios se moderan de acuerdo con nuestra política de privacidad, y todos los enlaces son nofollow. NO uses palabras clave en el campo del nombre. Tengamos una conversación personal y significativa.

Lista de verificación para lanzar WordPress

La lista de verificación definitiva para lanzar WordPress

Hemos recopilado todos los elementos esenciales de la lista de verificación para el lanzamiento de tu próximo sitio web de WordPress en un práctico ebook.
¡Sí, envíame el eBook gratis!