WordPress ca bază de cunoștințe

La lucru am folosit anterior KBPublisher pentru a gestiona baza noastră de cunoștințe. A costat bani, a fost greu de stil, codul este criptat cu cuburi ionice și așa mai departe, practic foarte greu de întreținut. WordPress poate face aceleași lucruri și chiar mai bine.

Acest tutorial vă va arăta cum să utilizați taxonomii personalizate pentru secțiunile bazei de cunoștințe și postări personalizate pentru articolele bazei de cunoștințe.


Etapa 1 Administrare

Bazele bazei de cunoștințe și articolele trebuie să fie gestionate. WordPress face acest lucru ușor de făcut cu taxonomii personalizate și tipuri personalizate post.

Doar înregistrați noua taxonomie și post tip. Adăugați următoarele în functions.php din tema ta.

Pentru mai multe informații despre insulele și dezavantajele acestei funcționalități, citiți celelalte articole personalizate post tip și taxonomie particularizate.

 funcția register_kb () register_post_type ('knowledgebase', array ('labels' => array ('name' => 'Knowledge Base' all_items '=>' Toate articolele '),' public '=> true,' publicly_queryable '=> true,' show_ui '=> true,' show_in_menu '=> true,' show_in_nav_menus '=> true, 20 "suportă" => array ("titlu", "editor", "autor", "miniatură", "comentarii", "postformate", "revizii" => array ('secțiunea'), 'has_archive' => true, 'rewrite' => array ('slug' => 'knowledgebase', 'hierarchical' => true, 'with_front' => false))); register_taxonomy ('secțiune', array ('knowledgebase'), array ('labels' => all_items '=>' Toate secțiunile '),' public '=> true,' hierarchical '=> true,' show_ui '=> true,' rewrite ' hierarchic '=> true,' with_front '=> false),));  add_action ('init', 'register_kb'); ($ wp_rewrite) $ new_rules = array ('knowledgebase /(.*)/(.*)' => 'index.php? post_type = knowledgebase & section ='. $ wp_rewrite-> preg_index (1) '$ wp_rewrite-> preg_index (2)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> reguli;  add_action ('generate_rewrite_rules', 'kb_rewrite_rules');

Aceasta se va executa după ce WordPress a terminat încărcarea, dar înainte de trimiterea oricăror antete, înregistrând tipul postului și taxonomia. De asemenea, acesta va adăuga regulile de rescriere pentru permalinks din taxonomie și tip post.

register_post_type înregistrează tipul postului personalizat, acesta este folosit pentru articolele KB. register_taxonomy înregistrează taxonomia personalizată, aceasta este folosită pentru secțiunile KB. Articolele nu vor fi ierarhice, dar secțiunile vor fi, deci oferă posibilitatea de a crea o structură arborescentă.

De asemenea, ar fi frumos să arătați secțiunile la care este alocat un articol.

 funcția kb_columns (implicit $) $ defaults ['section'] = 'Secțiuni'; returnează $ implicit;  add_filter ('manage_knowledgebase_posts_columns', 'kb_columns'); funcția kb_custom_column ($ column_name, $ post_id) $ taxonomy = $ column_name; $ post_type = get_post_type ($ post_id); $ terms = get_the_terms ($ post_id, taxonomie $); dacă (empty ($ terms) foreach ($ termeni ca $ termen) $ post_terms [] = "slug"> ". , $ taxonomy, 'edit')). '; echo join (', ', $ post_terms)Nu există condiții.„;  add_action ('manage_knowledgebase_posts_custom_column', 'kb_custom_column', 10, 2);

Acum adaugati cateva sectiuni si cateva articole, astfel incat sa fie ceva de vazut.


Pasul 2 Afișarea secțiunilor

Adăugați următoarele în functions.php din tema ta.

 funcția kb_sections ($ sections = array (), $ active_section = null) $ taxonomy = 'secțiune'; $ link_class = "; dacă (gol ($ secțiuni)) $ link_class = 'root'; $ sections = get_terms ($ taxonomy, array ('parent' => 0, 'hide_empty' => 0) kb_active_section (); echo '
    „; dacă (gol ($ active_section)) $ active_section = "; foreach ($ secțiuni ca secțiune $) $ toggle ="; $ section_children = get_terms (taxonomie $, array ('parent' => secțiunea $-> termen_id, 'hide_empty' => 0)); dacă ! empty ($ section_children) && $ link_class! = 'root') $ toggle = '„; echo '„; echo 'slug. "($ section_children)) echo '($ section_children)
      „; kb_sections ($ section_children, $ active_section); ecou ""; echo"
    "; funcția kb_active_section () $ taxonomy = 'secțiunea'; $ current_section ="; dacă is_single ()) $ sections = explode ('/', get_query_var (taxonomie $)); $ section_slug = end (secțiuni $); dacă $ section_slug! = ") $ term = get_term_by ('slug', $ section_slug, taxonomie $); $ current_section = $ term-> term_id; altceva $ term = get_term_by ('slug', get_query_var (taxonomie $), get_query_var ('taxonomy')) $ current_section = $ term-> term_id;

În directorul tematic creați un fișier numit Sidebar-sections.php unde al tau kb_sections funcția va fi numită afișarea unei liste de secțiuni neordonate și imbricate.

 

Astfel, secțiunile KB pot fi afișate oriunde doriți, inclusiv prin includerea barei laterale.

 

Pasul 3 Afișarea articolelor

Adăugați următoarele în functions.php din tema ta.

 funcția kb_article_permalink ($ article_id, $ section_id) $ taxonomy = 'secțiune'; $ articol = get_post ($ article_id); $ section = get_term ($ section_id, taxonomie $); $ section_ancestors = get_ancestors (secțiunea $-> termen_id, taxonomie $); krsort ($ section_ancestors); $ permalink = 'slug. '/'; endforeach; $ permalink. = secțiune $-> slug. '/'. $ article-> post_name. '/'> '. $ article-> post_title.'; return $ permalink;;

Notă: această metodă este necesară deoarece un articol poate fi legat la mai multe secțiuni.

Aceasta va genera o structură ierarhică permalink.

Ca: / Knowledgebase / section-slug / subsecțiune-slug / un alt sub-secțiune-slug / article-Slug

În dosarul tematic, creați apoi aceste fișiere: Arhiva-knowledgebase.php, single-knowledgebase.php, Conținutul-knowledgebase.php, taxonomie-section.php.

În Arhiva-knowledgebase.php adăugați următoarele pentru a afișa secțiunile și articolele recente.

 ID, secțiune); $ term = $ termeni [0]; echo kb_article_permalink ($ post-> ID, $ termen-> termen_id); endwhile; get_footer (); ?>

În single-knowledgebase.php adăugați următoarele.

 

În Conținutul-knowledgebase.php adăugați următoarele.

 

În taxonomie-section.php adăugați următoarele pentru a afișa o listă de articole dintr-o secțiune.

 interogare, array ('posts_per_page' => 100)); query_posts ($ args); $ term = get_term_by ("slug", get_query_var ("termen"), "secțiune"); get_header (); get_sidebar ("secțiuni"); în timp ce (have_posts ()): the_post (); echo kb_article_permalink ($ post-> ID, $ termen-> termen_id); endwhile; get_footer (); ?>

Acesta poate fi structurat și desemnat așa cum se dorește.


Exemplu

Un exemplu real de viață a modului în care funcționează și cum poate fi folosit: syneto.net


Referințe

  • ADD_ACTION
  • register_post_type
  • register_taxonomy
  • add_filter
Cod