summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/jetpack/modules/custom-post-types/testimonial.php')
-rw-r--r--plugins/jetpack/modules/custom-post-types/testimonial.php286
1 files changed, 286 insertions, 0 deletions
diff --git a/plugins/jetpack/modules/custom-post-types/testimonial.php b/plugins/jetpack/modules/custom-post-types/testimonial.php
new file mode 100644
index 00000000..6cd6b9d7
--- /dev/null
+++ b/plugins/jetpack/modules/custom-post-types/testimonial.php
@@ -0,0 +1,286 @@
+<?php
+/*
+ * Plugin Name: Jetpack Testimonial
+ * Plugin URI:
+ * Author: Automattic
+ * Version: 0.1
+ * License: GPL v2 or later
+ * Text Domain: jetpack
+ * Domain Path: /languages/
+ */
+
+class Jetpack_Testimonial {
+ const TESTIMONIAL_POST_TYPE = 'jetpack-testimonial';
+
+ var $version = '0.1';
+
+ static function init() {
+ static $instance = false;
+
+ if ( ! $instance )
+ $instance = new Jetpack_Testimonial;
+
+ return $instance;
+ }
+
+ /**
+ * Conditionally hook into WordPress.
+ *
+ * Themes must declare that they support this module by adding
+ * add_theme_support( 'jetpack-testimonial' ); during after_setup_theme.
+ *
+ * If no theme support is found there is no need to hook into
+ * WordPress. We'll just return early instead.
+ */
+ function __construct() {
+ // Return early if theme does not support Jetpack Testimonial.
+ if ( ! current_theme_supports( self::TESTIMONIAL_POST_TYPE ) )
+ return;
+
+ $this->register_post_types();
+ add_filter( 'enter_title_here', array( $this, 'change_default_title' ) );
+ add_filter( 'manage_jetpack-testimonial_posts_columns', array( $this, 'edit_title_column_label' ) );
+ add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
+ add_action( 'customize_register', array( $this, 'customize_register' ) );
+
+ $num_testimonials = self::count_testimonials();
+ if ( ! empty( $num_testimonials ) )
+ add_action( 'admin_menu', array( $this, 'add_customize_page' ) );
+ }
+
+ /* Setup */
+ function register_post_types() {
+ register_post_type( self::TESTIMONIAL_POST_TYPE, array(
+ 'description' => __( 'Customer Testimonials', 'jetpack' ),
+ 'labels' => array(
+ 'name' => esc_html__( 'Testimonials', 'jetpack' ),
+ 'singular_name' => esc_html__( 'Testimonial', 'jetpack' ),
+ 'menu_name' => esc_html__( 'Testimonials', 'jetpack' ),
+ 'all_items' => esc_html__( 'All Testimonials', 'jetpack' ),
+ 'add_new' => esc_html__( 'Add New', 'jetpack' ),
+ 'add_new_item' => esc_html__( 'Add New Testimonial', 'jetpack' ),
+ 'edit_item' => esc_html__( 'Edit Testimonial', 'jetpack' ),
+ 'new_item' => esc_html__( 'New Testimonial', 'jetpack' ),
+ 'view_item' => esc_html__( 'View Testimonial', 'jetpack' ),
+ 'search_items' => esc_html__( 'Search Testimonials', 'jetpack' ),
+ 'not_found' => esc_html__( 'No Testimonials found', 'jetpack' ),
+ 'not_found_in_trash' => esc_html__( 'No Testimonials found in Trash', 'jetpack' ),
+ ),
+ 'supports' => array(
+ 'title',
+ 'editor',
+ 'thumbnail',
+ 'page-attributes',
+ ),
+ 'rewrite' => array(
+ 'slug' => 'testimonial',
+ 'with_front' => false,
+ 'feeds' => false,
+ 'pages' => false,
+ ),
+ 'public' => true,
+ 'show_ui' => true, // set to false to replace with custom UI
+ 'menu_position' => 20, // below Pages
+ 'capability_type' => 'page',
+ 'map_meta_cap' => true,
+ 'has_archive' => true,
+ 'query_var' => 'testimonial',
+ ) );
+ }
+
+ /**
+ * Change ‘Enter Title Here’ text for the Testimonial.
+ */
+ function change_default_title( $title ) {
+ $screen = get_current_screen();
+
+ if ( 'jetpack-testimonial' == $screen->post_type )
+ $title = esc_html__( "Enter the customer's name here", 'jetpack' );
+
+ return $title;
+ }
+
+ /**
+ * Change ‘Title’ column label on all Testimonials page.
+ */
+ function edit_title_column_label( $columns ) {
+ $columns['title'] = esc_html__( 'Customer Name', 'jetpack' );
+
+ return $columns;
+ }
+
+ /**
+ * Update messages for the Testimonial admin.
+ */
+ function updated_messages( $messages ) {
+ global $post;
+
+ $messages['jetpack-testimonial'] = array(
+ 0 => '', // Unused. Messages start at index 1.
+ 1 => sprintf( __( 'Testimonial updated. <a href="%s">View testimonial</a>', 'jetpack'), esc_url( get_permalink( $post->ID ) ) ),
+ 2 => esc_html__( 'Custom field updated.', 'jetpack' ),
+ 3 => esc_html__( 'Custom field deleted.', 'jetpack' ),
+ 4 => esc_html__( 'Testimonial updated.', 'jetpack' ),
+ /* translators: %s: date and time of the revision */
+ 5 => isset( $_GET['revision'] ) ? sprintf( esc_html__( 'Testimonial restored to revision from %s', 'jetpack'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
+ 6 => sprintf( __( 'Testimonial published. <a href="%s">View testimonial</a>', 'jetpack' ), esc_url( get_permalink( $post->ID ) ) ),
+ 7 => esc_html__( 'Testimonial saved.', 'jetpack' ),
+ 8 => sprintf( __( 'Testimonial submitted. <a target="_blank" href="%s">Preview testimonial</a>', 'jetpack'), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) ),
+ 9 => sprintf( __( 'Testimonial scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview testimonial</a>', 'jetpack' ),
+ // translators: Publish box date format, see http://php.net/date
+ date_i18n( __( 'M j, Y @ G:i', 'jetpack' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post->ID) ) ),
+ 10 => sprintf( __( 'Testimonial draft updated. <a target="_blank" href="%s">Preview testimonial</a>', 'jetpack' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) ),
+ );
+
+ return $messages;
+ }
+
+
+ function set_testimonial_option() {
+ $testimonials_option = get_option( 'jetpack_testimonial' );
+
+ $testimonials = wp_count_posts( 'jetpack-testimonial' );
+ $published_testimonials = $testimonials->publish;
+
+ update_option( 'jetpack_testimonial', $published_testimonials );
+ }
+
+ function count_testimonials() {
+ $testimonials = get_transient( 'jetpack-testimonial-count-cache' );
+
+ if ( false === $testimonials ) {
+ $testimonials = (int) wp_count_posts( 'jetpack-testimonial' )->publish;
+
+ if ( ! empty( $testimonials ) ) {
+ set_transient( 'jetpack-testimonial-count-cache', $testimonials, 60*60*12 );
+ }
+ }
+
+ return $testimonials;
+ }
+
+ /**
+ * Adds a submenu link to the Customizer.
+ */
+ function add_customize_page() {
+ add_submenu_page(
+ 'edit.php?post_type=jetpack-testimonial',
+ esc_html__( 'Customize Testimonials Archive', 'jetpack' ),
+ esc_html__( 'Customize', 'jetpack' ),
+ 'edit_theme_options',
+ add_query_arg( array( 'url' => urlencode( home_url( 'testimonial' ) ) ), 'customize.php' ) . '#accordion-section-jetpack_testimonials'
+ );
+ }
+
+ /**
+ * Adds testimonial section to the Customizer.
+ */
+ function customize_register( $wp_customize ) {
+ jetpack_testimonial_custom_control_classes();
+
+ $wp_customize->add_section( 'jetpack_testimonials', array(
+ 'title' => esc_html__( 'Testimonials', 'jetpack' ),
+ 'theme_supports' => 'jetpack-testimonial',
+ ) );
+
+ $wp_customize->add_setting( 'jetpack_testimonials[page-title]', array(
+ 'default' => esc_html__( 'Testimonials', 'jetpack' ),
+ 'sanitize_callback' => array( 'Jetpack_Testimonial_Title_Control', 'sanitize_content' ),
+ 'sanitize_js_callback' => array( 'Jetpack_Testimonial_Title_Control', 'sanitize_content' ),
+ ) );
+ $wp_customize->add_control( 'jetpack_testimonials[page-title]', array(
+ 'section' => 'jetpack_testimonials',
+ 'label' => esc_html__( 'Testimonial Page Title', 'jetpack' ),
+ 'type' => 'text',
+ ) );
+
+ $wp_customize->add_setting( 'jetpack_testimonials[page-content]', array(
+ 'default' => '',
+ 'sanitize_callback' => array( 'Jetpack_Testimonial_Textarea_Control', 'sanitize_content' ),
+ 'sanitize_js_callback' => array( 'Jetpack_Testimonial_Textarea_Control', 'sanitize_content' ),
+ ) );
+ $wp_customize->add_control( new Jetpack_Testimonial_Textarea_Control( $wp_customize, 'jetpack_testimonials[page-content]', array(
+ 'section' => 'jetpack_testimonials',
+ 'settings' => 'jetpack_testimonials[page-content]',
+ 'label' => esc_html__( 'Testimonial Page Content', 'jetpack' ),
+ ) ) );
+
+ if ( current_theme_supports( 'post-thumbnails' ) ) {
+ $wp_customize->add_setting( 'jetpack_testimonials[featured-image]', array(
+ 'default' => '',
+ 'sanitize_callback' => array( 'Jetpack_Testimonial_Image_Control', 'attachment_guid_to_id' ),
+ 'sanitize_js_callback' => array( 'Jetpack_Testimonial_Image_Control', 'attachment_guid_to_id' ),
+ ) );
+ $wp_customize->add_control( new Jetpack_Testimonial_Image_Control( $wp_customize, 'jetpack_testimonials[featured-image]', array(
+ 'section' => 'jetpack_testimonials',
+ 'label' => esc_html__( 'Testimonial Page Featured Image', 'jetpack' ),
+ ) ) );
+ }
+ }
+}
+
+function jetpack_testimonial_custom_control_classes() {
+ class Jetpack_Testimonial_Title_Control extends WP_Customize_Control {
+ public function sanitize_content( $value ) {
+ if ( '' != $value )
+ $value = trim( convert_chars( wptexturize( $value ) ) );
+
+ return $value;
+ }
+ }
+
+ class Jetpack_Testimonial_Textarea_Control extends WP_Customize_Control {
+ public $type = 'textarea';
+
+ public function render_content() {
+ ?>
+ <label>
+ <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
+ <textarea rows="5" style="width:100%;" <?php $this->link(); ?>><?php echo esc_textarea( $this->value() ); ?></textarea>
+ </label>
+ <?php
+ }
+
+ public function sanitize_content( $value ) {
+ if ( ! empty( $value ) )
+ $value = apply_filters( 'the_content', $value );
+
+ $value = preg_replace( '@<div id="jp-post-flair"([^>]+)?>(.+)?</div>@is', '', $value ); // Strip WPCOM and Jetpack post flair if included in content
+
+ return $value;
+ }
+ }
+
+ /**
+ * Need to extend WP_Customize_Image_Control to return attachment ID instead of url
+ */
+ class Jetpack_Testimonial_Image_Control extends WP_Customize_Image_Control {
+ public $context = 'custom_image';
+
+ public function __construct( $manager, $id, $args ) {
+ $this->get_url = array( $this, 'get_img_url' );
+ parent::__construct( $manager, $id, $args );
+ }
+
+ public function get_img_url( $attachment_id = 0 ) {
+ if ( is_numeric( $attachment_id ) && wp_attachment_is_image( $attachment_id ) )
+ list( $image, $x, $y ) = wp_get_attachment_image_src( $attachment_id );
+
+ return ! empty( $image ) ? $image : $attachment_id;
+ }
+
+ public function attachment_guid_to_id( $value ) {
+ if ( is_numeric( $value ) )
+ return $value;
+
+ $matches = get_posts( array( 'post_type' => 'attachment', 'guid' => $value ) );
+
+ if ( empty( $matches ) )
+ return false;
+
+ return $matches[0]->ID; // this is the match we want
+ }
+ }
+}
+
+add_action( 'init', array( 'Jetpack_Testimonial', 'init' ) );