diff --git a/includes/admin/kbe-admin-functions.php b/includes/admin/kbe-admin-functions.php index 0a0b0de..baa50b8 100644 --- a/includes/admin/kbe-admin-functions.php +++ b/includes/admin/kbe-admin-functions.php @@ -1,8 +1,13 @@ Enqueue color picker +/** + * Enqueue scripts. + * + * Enqueue the required stylesheets and javascripts in the admin. + * + * @param string $hook_suffix Current page ID. + */ function kbe_admin_scripts( $hook_suffix ) { // Settings page if ( $hook_suffix == 'kbe_knowledgebase_page_kbe_options' ) { @@ -22,53 +27,119 @@ function kbe_admin_scripts( $hook_suffix ) { } add_action( 'admin_enqueue_scripts', 'kbe_admin_scripts' ); -//=========> Plugin menu +/** + * Add submenus. + * + * Add submenus for the custom added pages. + * + * @since 1.0 + */ function kbe_plugin_menu() { add_submenu_page( 'edit.php?post_type=kbe_knowledgebase', 'Order', 'Order', 'manage_options', 'kbe_order', 'wp_kbe_order' ); add_submenu_page( 'edit.php?post_type=kbe_knowledgebase', 'Settings', 'Settings', 'manage_options', 'kbe_options', 'wp_kbe_options' ); } add_action( 'admin_menu', 'kbe_plugin_menu' ); -// Require File kbe_order.php +/** + * Output order page. + * + * Output the HTML for the 'order' page. + * + * @since 1.0 + */ function wp_kbe_order() { require dirname( __FILE__ ) . '/kbe-order.php'; } -//=========> Require Files -// kbe_settings.php +/** + * Output settings page. + * + * Output the HTML for the settings page. + * + * @since 1.0 + */ function wp_kbe_options() { require 'kbe-settings.php'; } -//=========> Register plugin settings + function kbe_register_settings() { - register_setting( 'kbe_settings', 'kbe_settings', 'kbe_validate_settings' ); + + // Register each setting for automated $_POST handling + foreach ( kbe_get_settings() as $id => $setting ) { + + switch ( $setting['type'] ) { + case 'number' : + $sanitize_callback = 'absint'; + break; + default: + case 'text' : + $sanitize_callback = 'sanitize_text_field'; + break; + case 'title' : + $sanitize_callback = 'sanitize_title'; + break; + case 'kbe_radio_switch' : + $sanitize_callback = 'sanitize_kbe_radio_switch'; + break; + case 'color' : + $sanitize_callback = 'wp_kses_post'; + break; + + } + register_setting( 'kbe_settings', $id, $sanitize_callback ); + } } add_action( 'admin_init', 'kbe_register_settings' ); -/** - * Sanitize and validate plugin settings - * @param array $input - * @return array - * @since 1.1.0 - */ -function kbe_validate_settings( $input ) { - $input['kbe_plugin_slug'] = isset( $input['kbe_plugin_slug'] ) ? sanitize_title( $input['kbe_plugin_slug'] ) : ''; - $input['kbe_article_qty'] = intval( $input['kbe_article_qty'] ); - - $input['kbe_search_setting'] = isset( $input['kbe_search_setting'] ) && $input['kbe_search_setting'] ? 1 : 0 ; - $input['kbe_breadcrumbs_setting'] = isset( $input['kbe_breadcrumbs_setting'] ) && $input['kbe_breadcrumbs_setting'] ? 1 : 0 ; - - $sidebar_positions = array( 0, 1, 2 ); - - $input['kbe_sidebar_home'] = isset( $input['kbe_sidebar_home'] ) && in_array( $input['kbe_sidebar_home'], $sidebar_positions ) ? intval( $input['kbe_sidebar_home'] ) : 0; - $input['kbe_sidebar_inner'] = isset( $input['kbe_sidebar_inner'] ) && in_array( $input['kbe_sidebar_inner'], $sidebar_positions ) ? intval( $input['kbe_sidebar_inner'] ) : 0; +function kbe_radio_switch_on_off( $v ) { + if ( $v == 1 ) { + return 1; + } + return 0; +} - $input['kbe_comments_setting'] = isset( $input['kbe_comments_setting'] ) && $input['kbe_comments_setting'] ? 1 : 0 ; +function kbe_radio_switch_lrn( $v ) { + if ( $v == 1 ) { + return 1; + } elseif ( $v == 2 ) { + return 2; + } + return 0; +} - $input['kbe_bgcolor'] = isset( $input['kbe_bgcolor'] ) ? $input['kbe_bgcolor'] : ''; +function kbe_get_settings() { + + return array( + 'kbe_plugin_slug' => array( + 'type' => 'title', + ), + 'kbe_article_qty' => array( + 'type' => 'number', + ), + 'kbe_search_setting' => array( + 'type' => 'kbe_radio_switch_on_off', + ), + 'kbe_breadcrumbs_setting' => array( + 'type' => 'kbe_radio_switch_on_off', + ), + 'kbe_sidebar_home' => array( + 'type' => 'kbe_radio_switch_lrn', // left, right, none option + ), + 'kbe_sidebar_inner' => array( + 'type' => 'kbe_radio_switch_lrn', // left, right, none option + ), + 'kbe_comments_setting' => array( + 'type' => 'kbe_radio_switch_on_off', + ), + 'kbe_bgcolor' => array( + 'type' => 'color', + ), + 'kbe_wipe_uninstall' => array( + 'type' => 'kbe_radio_switch_on_off', + ), + ); - return $input; } function kbe_migrations_check() { diff --git a/includes/admin/kbe-settings.php b/includes/admin/kbe-settings.php index 0083ead..68bf824 100644 --- a/includes/admin/kbe-settings.php +++ b/includes/admin/kbe-settings.php @@ -1,26 +1,14 @@ 'Knowledgebase', - 'kbe_article_qty' => 5, - 'kbe_search_setting' => 0, - 'kbe_breadcrumbs_setting' => 0, - 'kbe_sidebar_home' => 0, - 'kbe_sidebar_inner' => 0, - 'kbe_comments_setting' => 0, - 'kbe_bgcolor' => '', - 'kbe_wipe_uninstall' => 0, -); -$kbe_settings = wp_parse_args( get_option( 'kbe_settings' ), $kbe_defaults ); - ?>

prefix . 'posts'; @@ -64,11 +52,11 @@ ?> - @@ -76,7 +64,7 @@ @@ -102,11 +90,11 @@ @@ -116,15 +104,15 @@ @@ -133,15 +121,15 @@ @@ -150,11 +138,11 @@ @@ -164,7 +152,7 @@ @@ -172,11 +160,11 @@
+ - +
- +

@@ -88,11 +76,11 @@

- > + > - > + >   - > + > - > + >   - > + > - > + > - > + >
- > + > - > + > - > + >
- > + > - > + >   - +
- > + > - > + > diff --git a/includes/kbe-articles.php b/includes/kbe-articles.php index 4ba7e33..893abb1 100644 --- a/includes/kbe-articles.php +++ b/includes/kbe-articles.php @@ -1,11 +1,13 @@ __( 'Knowledgebase', 'wp-knowledgebase' ), @@ -52,7 +54,13 @@ function kbe_articles() { } add_action( 'init', 'kbe_articles' ); -// Article taxonomy +/** + * Register KB taxonomies. + * + * Register the 'category' taxonomy for the Articles post type. + * + * @since 1.0.0 + */ function kbe_taxonomies() { // Add new taxonomy, make it hierarchical (like categories) $labels = array( @@ -81,6 +89,13 @@ function kbe_taxonomies() { } add_action( 'init', 'kbe_taxonomies', 0 ); +/** + * Register KB taxonomies. + * + * Register the 'tag' taxonomy for the Articles post type. + * + * @since 1.0.0 + */ function kbe_custom_tags() { $labels = array( 'name' => __( 'Knowledgebase Tags', 'wp-knowledgebase' ), @@ -105,6 +120,15 @@ function kbe_custom_tags() { } add_action( 'init', 'kbe_custom_tags', 0 ); +/** + * Update article view count. + * + * Update/set the article view count by adding a count. + * + * @since 1.0 + * + * @param int $postID Post ID to add the count to. + */ function kbe_set_post_views( $postID ) { $count_key = 'kbe_post_views_count'; $count = get_post_meta( $postID, $count_key, true ); @@ -118,9 +142,16 @@ function kbe_set_post_views( $postID ) { } } -//To keep the count accurate, lets get rid of prefetching -remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10 ); - +/** + * Get article view count. + * + * Get the view count for a article post. + * + * @since 1.0 + * + * @param int $postID Post ID to get the view count for. + * @return string View count with string text. + */ function kbe_get_post_views( $postID ) { $count_key = 'kbe_post_views_count'; $count = get_post_meta( $postID, $count_key, true ); @@ -133,13 +164,31 @@ function kbe_get_post_views( $postID ) { return $count . ' Views'; } - +/** + * Article custom columns. + * + * Add custom columns to the Article post type. + * + * @since 1.0 + * + * @param array $existing_columns List of existing columns. + * @return array List of modified columns. + */ function kbe_edit_columns( $existing_columns ) { $columns = array( 'views' => __( 'Views', 'kbe' ) ); return array_merge( $existing_columns, $columns ); } add_filter( 'manage_edit-kbe_knowledgebase_columns', 'kbe_edit_columns', 10 ); +/** + * Fill custom columns. + * + * Fill the newly added custom columns with the proper content. + * + * @since 1.0. + * + * @param string $column Column being processed/output. + */ function kbe_custom_columns( $column ) { global $post; switch ( $column ) { @@ -151,12 +200,31 @@ function kbe_custom_columns( $column ) { } add_action( 'manage_kbe_knowledgebase_posts_custom_column', 'kbe_custom_columns' ); +/** + * Make custom columns sortable. + * + * Make the custom added columns sortable. + * + * @since 1.2.0 + * + * @param array $columns List of existing sortable columns. + * @return mixed List of modified sortable columns. + */ function kbe_sortable_custom_columns( $columns ) { $columns['views'] = 'views'; return $columns; } add_filter( 'manage_edit-kbe_knowledgebase_sortable_columns', 'kbe_sortable_custom_columns' ); +/** + * Actually sort columns. + * + * Actually modify the query that sorts the articles to sort them by the new order option. + * + * @since 1.2.0 + * + * @param WP_Query $query Query that is being processed. + */ function kbe_sort_custom_columns( $query ) { if ( ! is_admin() || ! $query->is_main_query() ) { diff --git a/includes/kbe-core-functions.php b/includes/kbe-core-functions.php index ceed850..060fc98 100644 --- a/includes/kbe-core-functions.php +++ b/includes/kbe-core-functions.php @@ -1,8 +1,13 @@ Enqueue KBE Style file in header.php +/** + * Enqueue scripts. + * + * Enqueue the required stylesheets and javascripts on the front end. + * + * @since 1.0 + */ function kbe_styles() { if ( file_exists( get_stylesheet_directory() . '/wp_knowledgebase/kbe_style.css' ) ) { $stylesheet = get_stylesheet_directory_uri() . '/wp_knowledgebase/kbe_style.css'; @@ -17,7 +22,13 @@ function kbe_styles() { } add_action( 'wp_enqueue_scripts', 'kbe_styles' ); -//=========> Registering KBE widget area +/** + * Register widget area. + * + * Register a widget area that is used on the KB pages. + * + * @since 1.0 + */ function kbe_register_sidebar() { register_sidebar( array( 'name' => __( 'WP Knowledgebase Sidebar', 'wp-knowledgebase' ), @@ -31,6 +42,13 @@ function kbe_register_sidebar() { } add_action( 'widgets_init', 'kbe_register_sidebar' ); +/** + * Required search JS code. + * + * Javascript code required for the Search feature to work properly. + * + * @since 1.0 + */ function kbe_search_drop() { if ( KBE_SEARCH_SETTING == 1 ) { ?>