plugin personalizados pagina insertar inscripcion formularios formulario form ejemplos crear contacto configurar como wordpress wordpress-theming

wordpress - personalizados - Cómo agregar un archivo tipo post personalizado al menú



formulario de contacto wordpress sin plugin (3)

Gracias

Gracias a rasmussvanejensen por su agradable pregunta y por la respuesta, todavía estoy confundido de por qué Wordpress aún no ha agregado una función tan buena a su base de código por defecto.

Por cierto, creo que incluso hay una solución mejor que la proporcionada por el thamín , ya que puede romper en algunas situaciones.

Nota 1

Según el Codex, al usar register_post_type, se pueden agregar post_type adicionales a la instalación. Existe la posibilidad, alguien necesita cambiar el ''query_var'' y así se romperá el código provisto.

Nota 2

Además, es posible que no maneje la clase de current-menu-item , que se usará para la personalización de css para mostrar el elemento de menú como activo.

Nota 3

Como otra nota sobre el código, no es necesario definir las loop_index , item y items . son absolutamente inútiles.

Una mejor solución

Así que sugiero usar esta alternativa, para aquellos que quieren una solución más sólida en esto:

function prefix_add_metabox_menu_posttype_archive(){ add_meta_box( ''prefix_metabox_menu_posttype_archive'', __( ''Archives'' ), ''prefix_metabox_menu_posttype_archive'', ''nav-menus'', ''side'', ''default'' ); } add_action( ''admin_head-nav-menus.php'', ''prefix_add_metabox_menu_posttype_archive'' ); function prefix_metabox_menu_posttype_archive(){ $post_types = get_post_types( array( ''show_in_nav_menus'' => true, ''has_archive'' => true ), ''object'' ); if( $post_types ){ foreach( $post_types as $post_type ){ $post_type->classes = array( $post_type->name ); $post_type->type = $post_type->name; $post_type->object_id = $post_type->name; $post_type->title = $post_type->labels->name; $post_type->object = ''cpt_archive''; } $walker = new Walker_Nav_Menu_Checklist( array() );?> <div id="cpt-archive" class="posttypediv"> <div id="tabs-panel-cpt-archive" class="tabs-panel tabs-panel-active"> <ul id="ctp-archive-checklist" class="categorychecklist form-no-clear"><?php echo walk_nav_menu_tree( array_map( ''wp_setup_nav_menu_item'', $post_types ), 0, (object) array( ''walker'' => $walker ) );?> </ul> </div> </div> <p class="button-controls"> <span class="add-to-menu"> <input type="submit"<?php disabled( $nav_menu_selected_id, 0 ); ?> class="button-secondary submit-add-to-menu" value="<?php esc_attr_e( ''Add to Menu'' ); ?>" name="add-ctp-archive-menu-item" id="submit-cpt-archive" /> </span> </p><?php } } function prefix_cpt_archive_menu_filter( $items, $menu, $args ){ foreach( $items as &$item ){ if( $item->object != ''cpt_archive'' ) continue; $item->url = get_post_type_archive_link( $item->type ); if( get_query_var( ''post_type'' ) == $item->type ){ $item->classes []= ''current-menu-item''; $item->current = true; } } return $items; } add_filter( ''wp_get_nav_menu_items'', ''prefix_cpt_archive_menu_filter'', 10, 3 );

He estado buscando durante semanas y todavía no he encontrado una solución adecuada a este problema.

Estoy escribiendo un tema de Wordpress. Tengo un tipo de publicación personalizada llamada Works. Me gustaría agregar mi archivo de Works a mi menú y tenerlo así como sus publicaciones resaltadas cuando accedo a ellos.

Puedo acceder a mi archivo y publicaciones en los siguientes enlaces

Archivo de obras: /works/

Trabaja una sola publicación: /works/postname/

Mi solución ha sido nombrar el archive-works.php plantilla archive-works.php con un nombre de plantilla (archivo de trabajo). Luego crea una página vacía usando esa plantilla y agregando la página al menú. Esto resalta el archivo en el menú, pero no las publicaciones únicas.

Puedo resolver esto fácilmente con un enlace personalizado y algunos javascript, pero debe haber una manera mejor y más limpia.


Para agregar un "enlace de archivo de tipo postal personalizado" al menú, consulte la siguiente guía

  • Abra file functions.php e ingrese el código a continuación

    add_action(''admin_head-nav-menus.php'', ''wpclean_add_metabox_menu_posttype_archive''); function wpclean_add_metabox_menu_posttype_archive() { add_meta_box(''wpclean-metabox-nav-menu-posttype'', __(''Custom Post Type Archives''), ''wpclean_metabox_menu_posttype_archive'', ''nav-menus'', ''side'', ''default''); } function wpclean_metabox_menu_posttype_archive() { $post_types = get_post_types(array(''show_in_nav_menus'' => true, ''has_archive'' => true), ''object''); if ($post_types) : $items = array(); $loop_index = 999999; foreach ($post_types as $post_type) { $item = new stdClass(); $loop_index++; $item->object_id = $loop_index; $item->db_id = 0; $item->object = ''post_type_'' . $post_type->query_var; $item->menu_item_parent = 0; $item->type = ''custom''; $item->title = $post_type->labels->name; $item->url = get_post_type_archive_link($post_type->query_var); $item->target = ''''; $item->attr_title = ''''; $item->classes = array(); $item->xfn = ''''; $items[] = $item; } $walker = new Walker_Nav_Menu_Checklist(array()); echo ''<div id="posttype-archive" class="posttypediv">''; echo ''<div id="tabs-panel-posttype-archive" class="tabs-panel tabs-panel-active">''; echo ''<ul id="posttype-archive-checklist" class="categorychecklist form-no-clear">''; echo walk_nav_menu_tree(array_map(''wp_setup_nav_menu_item'', $items), 0, (object) array(''walker'' => $walker)); echo ''</ul>''; echo ''</div>''; echo ''</div>''; echo ''<p class="button-controls">''; echo ''<span class="add-to-menu">''; echo ''<input type="submit"'' . disabled(1, 0) . '' class="button-secondary submit-add-to-menu right" value="'' . __(''Add to Menu'') . ''" name="add-posttype-archive-menu-item" id="submit-posttype-archive" />''; echo ''<span class="spinner"></span>''; echo ''</span>''; echo ''</p>''; endif; }


Puedes hacer un truco simple en tus funciones.php:

add_filter(''nav_menu_css_class'', ''current_type_nav_class'', 10, 2); function current_type_nav_class($classes, $item) { // Get post_type for this post $post_type = get_query_var(''post_type''); // Go to Menus and add a menu class named: {custom-post-type}-menu-item // This adds a ''current_page_parent'' class to the parent menu item if( in_array( $post_type.''-menu-item'', $classes ) ) array_push($classes, ''current_page_parent''); return $classes; }

En su caso, solo tiene que agregar una clase ''works-menu-item'' con ese elemento de menú de archivo por el panel de administración;