WordPress als een kennisbank

Op het werk hebben we eerder KBPublisher gebruikt om onze kennisbank te beheren. Het heeft geld gekost, het was moeilijk te stylen, code is gecodeerd met een ionenblokje, enzovoort, eigenlijk heel moeilijk te onderhouden. WordPress kan dezelfde dingen doen en zelfs nog beter.

In deze zelfstudie leer je aangepaste taxonomieën gebruiken voor kennisbanksecties en aangepaste berichten voor kennisbankartikelen.


Stap 1 Beheer

Secties en artikelen van Knowledge Base moeten worden beheerd. WordPress maakt dit eenvoudig te doen met aangepaste taxonomieën en aangepaste berichttypen.

Registreer gewoon de nieuwe taxonomie en het berichttype. Voeg het volgende toe functions.php van je thema.

Lees onze andere aangepaste artikelen voor posttypen en aangepaste taxonomieën voor meer informatie over de ins en outs van deze functionaliteit.

 function register_kb () register_post_type ('knowledgebase', array ('labels' => array ('name' => 'Knowledge Base', 'menu_name' => 'Knowledge Base', 'singular_name' => 'Artikel', ' all_items '=>' Alle artikelen '),' public '=> true,' publicly_queryable '=> true,' show_ui '=> true,' show_in_menu '=> true,' show_in_nav_menus '=> true,' menu_position '=> 20, 'supports' => array ('title', 'editor', 'author', 'thumbnail', 'comments', 'post-formats', 'revisions'), 'hierarchical' => false, 'taxonomies' => array ('sectie'), 'has_archive' => true, 'rewrite' => array ('slug' => 'knowledge base', 'hierarchical' => true, 'with_front' => false))); register_taxonomy ('sectie', array ('knowledgebase'), array ('labels' => array ('name' => 'Sections', 'menu_name' => 'Secties', 'singular_name' => 'Sectie', ' all_items '=>' Alle secties '),' 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');

Dit wordt uitgevoerd nadat WordPress is geladen maar voordat kopteksten zijn verzonden, waarbij het posttype en de taxonomie worden geregistreerd. Ook worden de herschrijfregels voor de permalinks van de taxonomie en het berichttype toegevoegd.

De register_post_type registreert het aangepaste berichttype, dit wordt gebruikt voor de KB-artikelen. De register_taxonomy registreert de aangepaste taxonomie, deze wordt gebruikt voor de KB-secties. De artikelen zullen niet hiërarchisch zijn maar de secties zullen zijn, dus het geeft de mogelijkheid om een ​​boomstructuur te maken.

Het zou ook leuk zijn om de secties te tonen waaraan een artikel is toegewezen.

 function kb_columns ($ defaults) $ defaults ['section'] = 'Secties'; $ standaardwaarden retourneren;  add_filter ('manage_knowledgebase_posts_columns', 'kb_columns'); functie 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 ($ terms)) foreach ($ terms as $ term) $ post_terms [] = "slug"> ". esc_html (sanitize_term_field ('naam', $ term-> naam, $ term-> term_id , $ taxonomy, 'edit')). ''; echo join (',', $ post_terms); else echo 'Geen voorwaarden.';  add_action ('manage_knowledgebase_posts_custom_column', 'kb_custom_column', 10, 2);

Voeg nu enkele secties en enkele artikelen toe, zodat er iets te zien is.


Stap 2 De secties tonen

Voeg het volgende toe functions.php van je thema.

 function kb_sections ($ sections = array (), $ active_section = null) $ taxonomy = 'section'; $ link_class = "; if (leeg ($ secties)) $ link_class = 'root'; $ sections = get_terms ($ taxonomy, array ('parent' => 0, 'hide_empty' => 0)); $ active_section = kb_active_section (); echo '
    '; if (empty ($ active_section)) $ active_section = "; foreach ($ secties als $ sectie) $ toggle ="; $ section_children = get_terms ($ taxonomy, array ('parent' => $ section-> term_id, 'hide_empty' => 0)); if (! empty ($ section_children) && $ link_class! = 'root') $ toggle = ''; echo ''; echo 'slug. '">'. $ schakelen. $ sectie-> naam. ''; if (! empty ($ section_children)) echo '
      '; kb_sections ($ section_children, $ active_section); echo ""; echo"
    "; functie kb_active_section () $ taxonomy = 'section'; $ current_section ="; if (is_single ()) $ sections = explode ('/', get_query_var ($ taxonomy)); $ section_slug = einde ($ secties); 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; retourneer $ current_section;

Maak in de themamap een bestand met de naam sidebar-sections.php waar jouw kb_sections functie wordt de uitvoer van een ongeordende en geneste lijst met secties genoemd.

 

Zo kunnen de KB-secties overal worden weergegeven zoals gewenst door de zijbalk op te nemen.

 

Stap 3 De artikelen tonen

Voeg het volgende toe functions.php van je thema.

 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 ($ sectie-> term_id, $ taxonomie); krsort ($ section_ancestors); $ permalink = 'slug. '/'; endforeach; $ permalink. = $ sectie-> naaktslak. '/'. $ article-> post_name. '/ ">'. $ article-> post_title. ''; return $ permalink;

Notitie: deze methode is nodig omdat een artikel aan meerdere secties kan worden gekoppeld.

Dit genereert een hiërarchische permalink-structuur.

Net zoals: / Kennisbank / doorsnede-slug / subprofiel-slug / andere-onderdeel-slug / article-slug

Maak in de themamap deze bestanden: archief-knowledgebase.php, single-knowledgebase.php, inhoud knowledgebase.php, taxonomie-section.php.

In archief-knowledgebase.php voeg het volgende toe om de secties en recente artikelen te tonen.

 ID, 'sectie'); $ term = $ terms [0]; echo kb_article_permalink ($ post-> ID, $ term-> term_id); endwhile; get_footer (); ?>

In single-knowledgebase.php voeg het volgende toe.

 

In inhoud knowledgebase.php voeg het volgende toe.

 

In taxonomie-section.php voeg het volgende toe om een ​​lijst met artikelen uit een sectie te tonen.

 query, array ('posts_per_page' => 100)); query_posts ($ args); $ term = get_term_by ('slug', get_query_var ('term'), 'section'); get_header (); get_sidebar ('secties'); while (have_posts ()): the_post (); echo kb_article_permalink ($ post-> ID, $ term-> term_id); endwhile; get_footer (); ?>

Dit kan naar wens worden gestructureerd en gestyled.


Voorbeeld

Een echt voorbeeld van hoe dit werkt en hoe het kan worden gebruikt: syneto.net


Referenties

  • add_action
  • register_post_type
  • register_taxonomy
  • add_filter