WordPress como Base de Conocimiento

En el trabajo, anteriormente utilizábamos KBPublisher para administrar nuestra base de conocimientos. Costaba el dinero, era difícil de diseñar, el código está cifrado con un cubo de iones y así sucesivamente, básicamente, muy difícil de mantener. WordPress puede hacer las mismas cosas y aún mejor..

Este tutorial le mostrará cómo utilizar taxonomías personalizadas para las secciones de la base de conocimientos y las publicaciones personalizadas para los artículos de la base de conocimientos..


Paso 1 Administración

Las secciones de la base de conocimientos y los artículos deben ser gestionados. WordPress hace que esto sea fácil de hacer con taxonomías personalizadas y tipos de correos personalizados..

Simplemente registre la nueva taxonomía y el tipo de publicación. Agregue lo siguiente en funciones.php de tu tema.

Para obtener más información sobre los entresijos de esta funcionalidad, lea nuestros otros artículos personalizados sobre taxonomía y tipos de publicaciones..

 función register_kb () register_post_type ('knowledgebase', array ('labels' => array ('name' => 'Knowledge Base', 'menu_name' => 'Knowledge Base', 'singular_name' => 'Article', ' all_items '=>' Todos los artículos '),' public '=> true,' publicly_queryable '=> true,' show_ui '=> true,' show_in_menu '=> true,' show_in_nav_menus '=> true,' menu_position '=> 20, 'apoya' => array ('título', 'editor', 'autor', 'miniatura', 'comentarios', 'post-formatos', 'revisiones'), 'jerárquico' => falso, 'taxonomías' => array ('section'), 'has_archive' => true, 'rewrite' => array ('slug' => 'knowledgebase', 'hierarchical' => true, 'with_front' => false))); register_taxonomy ('section', array ('knowledgebase'), array ('labels' => array ('name' => 'Sections', 'menu_name' => 'Sections', 'singular_name' => 'Section', ' all_items '=>' Todas las secciones '),' public '=> true,' hierarchical '=> true,' show_ui '=> true,' rewrite '=> array (' slug '=>' knowledgebase-section ',' hierarchical '=> true,' with_front '=> false),));  add_action ('init', 'register_kb'); function kb_rewrite_rules ($ wp_rewrite) $ new_rules = array ('knowledgebase /(.*)/(.*)' => 'index.php? post_type = knowledgebase & section ='. $ wp_rewrite-> preg_index (1). '& knowledgebase = '. $ wp_rewrite-> preg_index (2)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> rules;  add_action ('generate_rewrite_rules', 'kb_rewrite_rules');

Esto se ejecutará después de que WordPress haya terminado de cargarse, pero antes de que se envíen los encabezados, se registra el tipo de publicación y la taxonomía. Además, agregará las reglas de reescritura para los enlaces permanentes de la taxonomía y el tipo de publicación..

los register_post_type registra el tipo de publicación personalizada, esto se utiliza para los artículos de KB. los register_taxonomy registra la taxonomía personalizada, esto se utiliza para las secciones de KB. Los artículos no serán jerárquicos, pero sí las secciones, por lo que ofrece la posibilidad de crear una estructura de árbol..

También sería bueno mostrar las secciones a las que se asigna un artículo.

 function kb_columns ($ defaults) $ defaults ['section'] = 'Sections'; devuelve $ por defecto;  add_filter ('manage_knowledgebase_posts_columns', 'kb_columns'); function kb_custom_column ($ column_name, $ post_id) $ taxonomy = $ column_name; $ post_type = get_post_type ($ post_id); $ Terms = get_the_terms ($ post_id, $ taxonomy); if (! empty ($ términos)) foreach ($ términos como $ término) $ post_terms [] = "slug"> ". esc_html (sanitize_term_field ('name', $ term-> name, $ term-> term_id , $ taxonomía, 'editar')). ''; echo join (',', $ post_terms); else echo 'Sin terminos.';  add_action ('manage_knowledgebase_posts_custom_column', 'kb_custom_column', 10, 2);

Ahora agregue algunas secciones y algunos artículos para que haya algo que mostrar.


Paso 2 mostrando las secciones

Agregue lo siguiente en funciones.php de tu tema.

 function kb_sections ($ section = array (), $ active_section = null) $ taxonomy = 'section'; $ link_class = "; if (vacío ($ secciones)) $ link_class = 'raíz'; $ secciones = get_terms ($ taxonomía, array ('parent' => 0, 'hide_empty' => 0)); $ active_section = kb_active_section (); echo '
    '; if (vacío ($ active_section)) $ active_section = "; foreach ($ secciones como $ section) $ toggle ="; $ section_children = get_terms ($ taxonomy, array ('parent' => $ section-> term_id, 'hide_empty' => 0)); if (! empty ($ section_children) && $ link_class! = 'root') $ toggle = ''; eco ''; echo 'slug. '">'. $ toggle. $ section-> name. ''; if (! empty ($ section_children)) echo '
      '; kb_sections ($ section_children, $ active_section); eco ""; eco "
    "; function kb_active_section () $ taxonomy = 'section'; $ current_section ="; if (is_single ()) $ section = explode ('/', get_query_var ($ taxonomy)); $ section_slug = end ($ secciones); if ($ section_slug! = ") $ term = get_term_by ('slug', $ section_slug, $ taxonomy); else $ terms = wp_get_post_terms (get_the_ID (), $ taxonomy); $ term = $ terms [0]; $ current_section = $ term-> term_id; else $ term = get_term_by ('slug', get_query_var ($ taxonomy), get_query_var ('taxonomy')); $ current_section = $ term-> term_id; return $ current_section;

En la carpeta de temas crea un archivo llamado barra lateral-secciones.php donde su kb_sections La función se llamará como salida de una lista de secciones desordenadas y anidadas.

 

De esta manera, las secciones de KB se pueden mostrar en todas partes como se desee al incluir la barra lateral.

 

Paso 3 mostrando los artículos

Agregue lo siguiente en funciones.php de tu tema.

 function kb_article_permalink ($ article_id, $ section_id) $ taxonomy = 'section'; $ article = get_post ($ article_id); $ section = get_term ($ section_id, $ taxonomy); $ section_ancestors = get_ancestors ($ section-> term_id, $ taxonomy); krsort ($ section_ancestors); $ permalink = 'slug. '/'; endforeach $ permalink. = $ section-> slug. '/'. $ articulo-> post_name. '/ ">'. $ article-> post_title. ''; return $ permalink;

Nota: este método es necesario porque un artículo se puede vincular a varias secciones.

Esto generará una estructura jerárquica de enlace permanente..

Me gusta: / knowledgebase / section-slug / sub-section-slug / another-subs-section-slug / article-slug

En la carpeta de temas, cree estos archivos: archive-knowledgebase.php, single-knowledgebase.php, content-knowledgebase.php, taxonomy-section.php.

En archive-knowledgebase.php Agregue lo siguiente para mostrar las secciones y artículos recientes..

 ID, 'sección'); $ término = $ términos [0]; echo kb_article_permalink ($ post-> ID, $ term-> term_id); al final get_footer (); ?>

En single-knowledgebase.php agrega lo siguiente.

 

En content-knowledgebase.php agrega lo siguiente.

 

En taxonomy-section.php agregue lo siguiente para mostrar una lista de artículos de una sección.

 consulta, matriz ('posts_per_page' => 100)); query_posts ($ args); $ term = get_term_by ('slug', get_query_var ('term'), 'section'); get_header (); get_sidebar ('secciones'); while (have_posts ()): the_post (); echo kb_article_permalink ($ post-> ID, $ term-> term_id); al final get_footer (); ?>

Esto puede ser estructurado y estilizado como se desee..


Ejemplo

Un ejemplo real de cómo funciona esto y cómo se puede usar: syneto.net


Referencias

  • add_action
  • register_post_type
  • register_taxonomy
  • Añadir filtro