Більше результатів...

Загальні селектори
Тільки точні збіги
Шукати у заголовках
Шукати у контенті
Вибір типів постів
Фільтрувати за категоріями
FAQ
Hostenko
Натхнення
Відео уроки
Новини
Плагіни
теми
Уроки
Хакі

На роботі для управління нашою базою знань раніше ми використовували KBPublisher. Це рішення коштувало нам грошей, було заплутано у стилізації, код був зашифрований за допомогою ion куб тощо, коротше кажучи, було трудомістким і затратним. WordPress може робити те саме, але краще і зручніше.

Цей посібник покаже, як використовувати власну таксономію для розділів бази знань та власні пости для статей бази знань.

Організація

| демо |

Крок 1. адміністрування

Розділами та статтями бази знань необхідно керувати. WordPress робить таке керування простим за допомогою власної таксономії та власних типів постів.

Просто зареєструйте нову таксономію та тип посту. Додайте наступне до файлу functions.php вашої теми.

Щоб дізнатися більше про цей функціонал, прочитайте інші статті про власних типах постів и власної таксономії.

function register_kb() {
	register_post_type( 'knowledgebase',
		array(
			'labels' => array(
				'name' => 'Knowledge Base',
				'menu_name' => 'Knowledge Base',
				'singular_name' => 'Article',
				'all_items' => 'All Articles'
			),
			'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( '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' => 'All Sections'
			),
			'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' );

Він запуститься після того, як WordPress завантажиться, але до того, як будуть відправлені будь-які заголовки, реєструючи тип посту та таксономію. Також він додасть правила перезапису для постійних посилань на таксономію та тип посту.

  • register_post_type реєструє власний тип посту, який використовуватиметься для статей бази знань.
  • таксономія_реєстру реєструє власну таксономію, що використовується розділів бази знань.

Статті не будуть у порядку ієрархії, але розділи будуть, так що це дає можливість створити деревоподібну структуру.

Також добре було б показати розділи, до яких належить стаття.

function kb_columns( $defaults ) {
	$defaults['section'] = 'Sections';
	return $defaults;
}
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( $terms ) ) {
		foreach ( $terms as $term ) {
			$post_terms[] = "<a href='edit.php?post_type={$post_type}&{$taxonomy}={$term->slug}'> " . esc_html(sanitize_term_field('name', $term->name, $term->term_id, $taxonomy, 'edit')) . '</a>';
		}
		echo join( ', ', $post_terms );
	}
	else echo '<i>No terms.</i>';
}
add_action( 'manage_knowledgebase_posts_custom_column', 'kb_custom_column', 10, 2 );

Організація

Тепер додайте якісь розділи та статті, щоб було що показувати.

Крок 2. Відображення розділів

Додайте наступний код у файл functions.php вашої теми.

function kb_sections( $sections = array(), $active_section = null ) {
	$taxonomy = 'section';
	$link_class = '';
	if ( empty( $sections ) ) {
		$link_class = 'root';
		$sections = get_terms( $taxonomy, array( 'parent' => 0, 'hide_empty' => 0 ) );
		$active_section = kb_active_section();
		echo '<ul id="kb-sections" class="unstyled">';
	}
	if ( empty( $active_section ) ) {
		$active_section = '';
	}
	foreach ( $sections as $section ) {
		$toggle = '';
		$section_children = get_terms( $taxonomy, array( 'parent' => $section->term_id, 'hide_empty' => 0 ) );
		if ( !empty( $section_children ) && $link_class != 'root' ) {
			$toggle = '<i class="toggle"></i>';
		}
		echo '<li class="' . ( $section->term_id == $active_section ? 'active' : '' ) . '">';
		echo '<a  href="' . get_term_link( $section, $taxonomy ) . '" class="' . $link_class . '" rel="' . $section->slug . '">' . $toggle . $section->name . '</a>';

		if ( !empty( $section_children ) ) {
			echo '<ul id="' . $section->slug . '" class="children">';
			kb_sections( $section_children, $active_section );
		}
		echo "</li>";
	}
	echo "</ul>";
}

function kb_active_section() {
	$taxonomy = 'section';
	$current_section = '';
	if ( is_single() ) {
		$sections = explode( '/', get_query_var( $taxonomy ) );
		$section_slug = end( $sections );
		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;
}

У папці теми створіть файл під назвою sidebar-sections.php, де буде викликатись функція kb_sections, яка видає невпорядкований перелік розділів.

<?php kb_sections(); ?>

У такому вигляді розділи бази знань можна показати будь-де шляхом включення їх у сайдбар.

<?php get_sidebar( 'sections' ); ?>

Крок 3. Відображення статей

Додайте наступний код у файл functions.php вашої теми.

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 = '<a href="/knowledgebase/';
	foreach ($section_ancestors as $ancestor):
		$section_ancestor = get_term( $ancestor, $taxonomy );
		$permalink.= $section_ancestor->slug . '/';
	endforeach;
	$permalink.= $section->slug . '/' . $article->post_name . '/" >' . $article->post_title . '</a>';
	return $permalink;
}

Зверніть увагу: цей метод є обов'язковим, оскільки стаття може бути прив'язана до кількох розділів. Це створює ієрархічну структуру постійних посилань.

Наприклад:

/knowledgebase/section-slug/sub-section-slug/another-sub-section-slug/article-slug

У папці теми потім створіть такі файли: archive-knowledgebase.php, single-knowledgebase.php, content-knowledgebase.php, таксономія-розділ.php.

В archive-knowledgebase.php для відображення розділів та нещодавно доданих статей додайте наступне:

<?php
get_header();
get_sidebar( 'sections' );
while ( have_posts() ) : the_post();
	$terms = wp_get_post_terms( $post->ID, 'section' );
	$term = $terms[0];
	echo kb_article_permalink( $post->ID, $term->term_id );
endwhile;
get_footer();
?>

В single-knowledgebase.php додайте наступний код:

<?php
get_header();
while ( have_posts() ) : the_post();
	get_template_part( 'content', 'knowledgebase' );
endwhile;
get_footer();
?>

В content-knowledgebase.php додайте наступне:

<?php
get_sidebar( 'sections' );
the_title();
the_content();
?>

В таксономія-розділ.php додайте наступний код для відображення списку статей у розділі.

<?php
global $wp_query;
$args = array_merge( $wp_query->query, array( 'posts_per_page' => 100 ) );
query_posts( $args );
$term = get_term_by( 'slug', get_query_var( 'term' ), 'section' );

get_header();
get_sidebar( 'sections' );
while ( have_posts() ) : the_post();
	echo kb_article_permalink( $post->ID, $term->term_id );
endwhile;
get_footer();
?>

Структурувати та стилізувати це можна як завгодно.

Приклад

Як приклад, як це працює в житті і як це можна використовувати, пропонуємо подивитися на syneto.net

Керівництво

  • add_action
  • register_post_type
  • таксономія_реєстру
  • add_filter
Джерело: WP.tutsplus.com
редактор wpcafe
Вивчає сайтобудування з 2008 року. Практикуючий вебмайстер, який спеціалізується на створенні сайтів на WordPress. Задати питання Олексію можна на https://profiles.wordpress.org/wpthemeus/

Коментарі до запису: 9

Ваня:

Мій сайт двома мовами. Як зробити так, щоб перекладалися розділи (section)? Для статій немає проблем :)

Ваня:

qtranslate не дає варіант іншою мовою в розділах, а для статій є.

SubonAir:

А як css підправити, щоб на саті в прикладі красиво виїжджало. А то киш-міш із рубрик та статей виходить поки що...=(

WordPresso:

Вибачте, але редагування стилів — це вже особистий творчий процес, тут ми не можемо підказати.

SubonAir:

Півдня знався на коді, не впевнений, що справа в css. Він список розділів "sections" у сайдбарі виводить, все ок, а ось список постів у кожній категорії немає. Скажіть, а ви описані кроки самі виконували чи просто зробили переклад статті Роберта Каліна http://wp.tutsplus.com/tutorials/business/wordpress-as-a-knowledge-base/? Може ще є посилання на сайти які також використовували цей метод організації бази знань?

WordPresso:

Ця публікація є авторським перекладом статті, вказаної у джерелі.

SubonAir:

Ааа, тоді ясно! Дякую за переклад. І в цілому, за корисний сайт з вордпрес =)

Богдан:

Нічого не виходить, зробив усе, як в інструкції, а як далі з ним працювати?

Богдан:

Хто на якій версії клепав це щастя? у мене на 4.3.1 не вийшло((

Додати коментар