constants(); register_activation_hook( __FILE__, array( $this, 'activation' ) ); register_deactivation_hook( __FILE__, array( $this, 'deactivation' ) ); add_action( 'init', array( $this, 'init'), 9999 ); add_action( 'init', array( $this, 'content_types' ) ); add_action( 'init', array( $this, 'shortcodes' ) ); add_action( 'widgets_init', array( $this, 'widgets' ) ); add_action( 'wp_enqueue_scripts', array( $this, 'scripts' ) ); add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) ); add_action( 'manage_posts_custom_column', array( $this, 'column_action' ) ); add_action( 'wp_dashboard_setup', array( $this, 'dash_widget' ) ); add_action( 'dashboard_glance_items', array( $this, 'at_a_glance' ) ); add_filter( 'widget_text', 'do_shortcode' ); add_filter( 'the_content', array( $this, 'content_filter' ) ); add_filter( 'enter_title_here', array( $this, 'title_text' ) ); add_filter( 'cmb_meta_boxes', array( $this, 'metaboxes' ) ); add_filter( 'post_updated_messages', array( $this, 'messages' ) ); add_filter( 'manage_edit-testimonials_columns', array( $this, 'columns_filter' ) ); } /** * Define plugin constants * * @since 1.0.0 */ function constants() { define( 'ACT_VERSION', '1.0.0' ); define( 'ACT_URL', trailingslashit( plugin_dir_url( __FILE__ ) ) ); define( 'ACT_CSS_URL', trailingslashit( ACT_URL . 'css' ) ); define( 'ACT_IMAGES_URL', trailingslashit( ACT_CSS_URL . 'images' ) ); define( 'ACT_DIR', trailingslashit( plugin_dir_path( __FILE__ ) ) ); } /** * Runs on plugin activation * * @since 1.0.0 */ function activation() { $this->content_types(); flush_rewrite_rules(); } /** * Runs on plugin deactivation * * @since 1.0.0 */ function deactivation() { flush_rewrite_rules(); } /** * Set our plugin defaults for post type registration and default query args * * @return array $defaults * @since 1.0.0 */ function defaults() { $defaults = array( 'post_type' => array( 'slug' => 'testimonials', 'args' => array( 'labels' => array( 'name' => __( 'Testimonials', 'act' ), 'singular_name' => __( 'Testimonial', 'act' ), 'add_new' => __( 'Add New', 'act' ), 'add_new_item' => __( 'Add New Testimonial Item', 'act' ), 'edit' => __( 'Edit', 'act' ), 'edit_item' => __( 'Edit Testimonial Item', 'act' ), 'new_item' => __( 'New Item', 'act' ), 'view' => __( 'View Testimonial', 'act' ), 'view_item' => __( 'View Testimonial Item', 'act' ), 'search_items' => __( 'Search Testimonials', 'act' ), 'not_found' => __( 'No testimonial items found', 'act' ), 'not_found_in_trash' => __( 'No testimonial items found in the trash', 'act' ) ), 'public' => true, 'query_var' => true, 'menu_position' => 20, 'menu_icon' => 'dashicons-testimonial', 'has_archive' => false, 'supports' => array( 'title', 'editor' ), 'rewrite' => array( 'with_front' => false ) ) ) ); return apply_filters( 'arconix_testimonials_admin_defaults', $defaults ); } /** * Load our Meta Box and At a Glance helper classes * * @since 1.0.0 */ function init() { if( ! class_exists( 'cmb_Meta_Box' ) ) require_once( '/metabox/init.php' ); if ( ! class_exists( 'Gamajo_Dashboard_Glancer' ) ) require_once( 'class-gamajo-dashboard-glancer.php' ); } /** * Register the post_type * * @since 1.0.0 */ function content_types() { $defaults = $this->defaults(); register_post_type( $defaults['post_type']['slug'], $defaults['post_type']['args'] ); } /** * Register Plugin Widget * * @since 1.0.0 */ function widgets() { register_widget( 'Arconix_Testimonials_Widget' ); } /** * Register plugin shortcode(s) * * @since 1.0.0 */ function shortcodes() { add_shortcode( 'ac-testimonials', array( $this, 'testimonials_shortcode' ) ); } /** * Testimonials shortcode * * @param array $atts Passed attributes * @param string $content N/A - self-closing shortcode * @return string result of query * @since 1.0.0 */ function testimonials_shortcode( $atts, $content = null ) { $t = new Arconix_Testimonials(); return $t->loop( $atts ); } /** * Filter The_Content and add our data to it * * @param string $content * @return null|string $content return early if not on the correct CPT * @since 1.0.0 */ function content_filter( $content ) { if ( ! is_single() ) return $content; if ( ! get_post_type() == 'testimonial' ) return $content; // So we can grab the default gravatar size $t = new Arconix_Testimonials(); $defaults = $t->defaults(); $gs = apply_filters( 'arconix_testimonials_content_gravatar_size', $defaults['gravatar']['size'] ); $gravatar = '
' . $t->get_gravatar( $gs ) . '
'; $cite = '
' . $t->get_citation( false ) . '
'; $content = '
' . $content . '
'; $content = $cite . $gravatar . $content; return $content; } /** * Load the plugin CSS. If the css file is present in the theme directory, it will be loaded instead, * allowing for an easy way to override the default template. If you'd like to remove the CSS entirely, * such as when building the styles into a single file, simply reference the filter and return false * * @example add_filter( 'pre_register_arconix_testimonials_css', '__return_false' ); * * @since 1.0.0 */ function scripts() { // If the CSS is not being overridden in a theme folder, allow the user to filter it out entirely (if building into stylesheet or the like) if( apply_filters( 'pre_register_arconix_testimonials_css', true ) ) { // Checks the child directory and then the parent directory. if( file_exists( get_stylesheet_directory() . '/arconix-testimonials.css' ) ) wp_enqueue_style( 'arconix-testimonials', get_stylesheet_directory_uri() . '/arconix-testimonials.css', false, ACT_VERSION ); elseif( file_exists( get_template_directory() . '/arconix-testimonials.css' ) ) wp_enqueue_style( 'arconix-testimonials', get_template_directory_uri() . '/arconix-testimonials.css', false, ACT_VERSION ); else wp_enqueue_style( 'arconix-testimonials', ACT_CSS_URL . 'arconix-testimonials.css', false, ACT_VERSION ); } } /** * Load the admin CSS. If you'd like to remove the CSS entirely, such as when building the styles * into a single file, simply reference the filter and return false * * @example add_filter( 'pre_register_arconix_testimonials_admin_css', '__return_false' ); * * @since 1.0.0 */ function admin_scripts() { if( apply_filters( 'pre_register_arconix_testimonials_admin_css', true ) ) wp_enqueue_style( 'arconix-testimonials-admin', ACT_CSS_URL . 'admin.css', false, ACT_VERSION ); } /** * Modifies the post save notifications to properly reflect the post-type * * @global stdObject $post * @global int $post_ID * @param array $messages * @return array $messages * @since 1.0.0 */ function messages( $messages ) { global $post, $post_ID; $messages['testimonials'] = array( 0 => '', // Unused. Messages start at index 1. 1 => sprintf( __( 'Testimonial updated. View testimonial' ), esc_url( get_permalink( $post_ID ) ) ), 2 => __( 'Custom field updated.' ), 3 => __( 'Custom field deleted.' ), 4 => __( 'Testimonial updated.' ), /* translators: %s: date and time of the revision */ 5 => isset( $_GET['revision'] ) ? sprintf( __( 'Testimonial restored to revision from %s' ), wp_post_revision_title( ( int ) $_GET['revision'], false ) ) : false, 6 => sprintf( __( 'Testimonial published. View testimonial' ), esc_url( get_permalink( $post_ID ) ) ), 7 => __( 'Testimonial saved.' ), 8 => sprintf( __( 'Testimonial submitted. Preview testimonial' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post_ID ) ) ) ), 9 => sprintf( __( 'Testimonial scheduled for: %1$s. Preview testimonial' ), // translators: Publish box date format, see http://php.net/date date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink( $post_ID ) ) ), 10 => sprintf( __( 'Testimonial draft updated. Preview testimonial' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post_ID ) ) ) ), ); return $messages; } /** * Choose the specific columns we want to display in the WP Admin Testimonials list * * @param array $columns * @return array $columns * @since 1.0.0 */ function columns_filter( $columns ) { $columns = array( "cb" => "", "testimonial-gravatar" => "Gravatar", "title" => "Author", "testimonial-byline" => "Byline", "testimonial-content" => "Testimonial", "date" => "Date" ); return $columns; } /** * Supply the data that shows up in the custom columns we defined * * @param array $column * @since 1.0.0 */ function column_action( $column ) { $t = new Arconix_Testimonials(); switch( $column ) { case "testimonial-gravatar": $t->get_gravatar( 60, true ); break; case "testimonial-content": the_excerpt(); break; case "testimonial-byline": $t->get_citation( false, true, true ); default: break; } } /** * Customize the "Enter title here" text on the Testimonial creation screen * * @param string $title * @return $title * @since 1.0.0 */ function title_text( $title ) { $screen = get_current_screen(); if( 'testimonials' == $screen->post_type ) $title = __( 'Enter author name here', 'act' ); return $title; } /** * Add the Post type to the "At a Glance" Dashboard Widget * * @since 1.0.0 */ function at_a_glance() { $glancer = new Gamajo_Dashboard_Glancer; $glancer->add( 'testimonials' ); } /** * Adds a widget to the dashboard. Can be overridden completely by a filter, but only shows for users that can * manage options (also filterable if desired) * * @since 1.0.0 */ function dash_widget() { if( apply_filters( 'pre_register_arconix_testimonials_dashboard_widget', true ) and apply_filters( 'arconix_testimonial_dashboard_widget_security', current_user_can( 'manage_options' ) ) ) wp_add_dashboard_widget( 'ac-testimonials', 'Arconix Testimonials', array( $this, 'dash_widget_output' ) ); } /** * Output for the dashboard widget * * @since 1.0.0 */ function dash_widget_output() { echo '
'; wp_widget_rss_output( array( 'url' => 'http://arconixpc.com/tag/arconix-testimonials/feed', // feed url 'title' => 'Arconix Testimonials Posts', // feed title 'items' => 3, // how many posts to show 'show_summary' => 1, // display excerpt 'show_author' => 0, // display author 'show_date' => 1 // display post date ) ); echo '
'; echo '
'; } /** * Create the post type metabox * * @param array $meta_boxes * @return array $meta_boxes * @since 1.0.0 */ function metaboxes( $meta_boxes ) { $metabox = array( 'id' => 'testimonials-info', 'title' => 'Testimonial Details', 'pages' => array( 'testimonials' ), 'context' => 'normal', 'priority' => 'high', 'show_names' => true, 'fields' => array( array( 'name' => 'E-mail Address', 'id' => '_act_email', 'desc' => sprintf( __( 'To display the author\'s %sGravatar%s (optional).', 'act' ), '', '' ), 'type' => 'text_medium', ), array( 'name' => 'Byline', 'id' => '_act_byline', 'desc' => __( 'Enter a byline for the author of this testimonial (optional).', 'act' ), 'type' => 'text_medium', ), array( 'name' => 'Website', 'id' => '_act_url', 'desc' => __( 'Enter a URL for the individual or organization (optional).', 'act' ), 'type' => 'text_medium', ) ) ); $meta_boxes[] = $metabox; return $meta_boxes; } }