Advertisement
eqhes

Wordpress Page Excerpt Widget new features: v0.3 ?

Mar 20th, 2013
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.30 KB | None | 0 0
  1. <?php
  2. /*
  3.     Plugin Name: Page Excerpt Widget
  4.     Plugin URI: http://jonathanmh.com/wordpress-page-excerpt-widget/
  5.     Description: Plugin for displaying a page excerpt in a widget area
  6.     Author: Jonathan M. Hethey, David Comuñas
  7.     Version: 0.2
  8.     Author URI: http://jonathanmh.com
  9. */
  10.  
  11. global $wp_version;
  12. if((float)$wp_version >= 2.8){
  13. class PageExcerptWidget extends WP_Widget {
  14.  
  15.     /*
  16.     * construct
  17.     */
  18.    
  19.     function PageExcerptWidget() {
  20.         parent::WP_Widget(
  21.             'PageExcerptWidget'
  22.             , 'Page Excerpt Widget'
  23.             , array(
  24.                 'description' => 'Display Excerpt of Page in any Widget Area'
  25.             )
  26.         );
  27.     }
  28.    
  29.     function pew_trim($text, $length) {
  30.         // if the text is longer than the length it is supposed to be
  31.         if (strlen($text) > $length){
  32.             // trim to length
  33.             $text = substr($text, 0, $length);
  34.             // find last whitespace in string
  35.             $last_whitespace = strrpos($text, ' ');
  36.             // trim to last whitespace in string
  37.             $text = substr($text, 0, $last_whitespace);
  38.             // append dots
  39.             return $text;
  40.         }
  41.         // if the text is shorter than the trim limit, pass it on
  42.         else {
  43.             return $text;
  44.         }
  45.     }
  46.    
  47.     function widget($args, $instance) {
  48.         extract($args, EXTR_SKIP);
  49.         echo $before_widget;
  50.         $page_data = get_page($instance['page_id']);
  51.         $title = $page_data->post_title;
  52.         $permalink = get_permalink($instance['page_id']);
  53.         if (!empty($title) && $instance['display_title'] == 'on') {
  54.             echo $before_title;
  55.             if ($instance['link_title']){
  56.                 echo '<a href="'. $permalink .'">'. $title . '</a>';
  57.             }
  58.             else {
  59.                 echo $title;
  60.             }
  61.             echo $after_title;
  62.         };
  63.        
  64.         if ($instance['enable_p_tags'] == 'on'){
  65.             echo '<p>';
  66.         }
  67.            
  68.         $trimmed_content = $this->pew_trim($page_data->post_content, $instance['excerpt_length']);
  69.         if ($instance['enable_apply_filters'] == 'on'){
  70.             echo apply_filters('the_content', $trimmed_content);
  71.         } else {
  72.             echo $trimmed_content;
  73.         }
  74.        
  75.         if ($instance['dot_excerpt'] == 'on'){
  76.             echo ' <span class="jmhpew-dot-excerpt">[...]</span>';
  77.         }
  78.        
  79.         if ($instance['enable_p_tags'] == 'on'){
  80.             echo '</p>';
  81.         }
  82.  
  83.         if ($instance['display_read_more'] == 'on'){
  84.             echo '<p class="jmhpew-readmore"><a href="'. $permalink .'">'. $instance['read_more_label'] .'</a></p>';
  85.         }
  86.        
  87.         /* debugging
  88.             echo '<pre>';
  89.             print_r($page_data);
  90.             echo '</pre>';
  91.         */
  92.         echo $after_widget;
  93.        
  94.     }
  95.    
  96.     function update($new_instance, $old_instance) {
  97.         $instance = $old_instance;
  98.         $instance['page_id'] = strip_tags($new_instance['page_id']);
  99.         $instance['excerpt_length'] = strip_tags($new_instance['excerpt_length']);
  100.         $instance['dot_excerpt'] = strip_tags($new_instance['dot_excerpt']);
  101.         $instance['display_title'] = strip_tags($new_instance['display_title']);
  102.         $instance['link_title'] = strip_tags($new_instance['link_title']);
  103.         $instance['display_read_more'] = strip_tags($new_instance['display_read_more']);
  104.         $instance['enable_apply_filters'] = strip_tags($new_instance['enable_apply_filters']);
  105.         $instance['enable_p_tags'] = strip_tags($new_instance['enable_p_tags']);
  106.         $instance['read_more_label'] = strip_tags($new_instance['read_more_label']);
  107.         return $instance;
  108.     }
  109.  
  110.     function form($instance) {
  111.         $default =  array(
  112.               'title'               => 'Page Excerpt Widget'
  113.             , 'excerpt_length'      => 500
  114.             , 'dot_excerpt'         => 'on'
  115.             , 'display_title'       => 'on'
  116.             , 'display_read_more'   => 'on'
  117.             , 'enable_apply_filters'    => 'off'
  118.             , 'enable_p_tags'   => 'on'
  119.             , 'read_more_label'     => 'read full page'
  120.                          );
  121.         $instance = wp_parse_args( (array) $instance, $default );
  122.         $page_id = $this->get_field_name('page_id');
  123.         _e("Page to display: " );
  124.             ?>
  125.             <select name="<?php echo $page_id; ?>">
  126.                 <?php
  127.                     $pages = get_pages();
  128.                     foreach ($pages as $page){
  129.                         if ($page->ID == $instance['page_id']){
  130.                             $selected = 'selected="selected"';
  131.                         }
  132.                         else {
  133.                             $selected='';
  134.                         }
  135.                         echo '<option value="'
  136.                             .$page->ID.'"'
  137.                             .$selected.'>'
  138.                             .$page->post_title
  139.                             .'</option>';
  140.                     };
  141.                 ?>
  142.             </select>
  143.         <?php
  144.  
  145.         $field_excerpt_length_id = $this->get_field_id('excerpt_length');
  146.         $field_excerpt_length = $this->get_field_name('excerpt_length');
  147.         echo "\r\n"
  148.             .'<p><label for="'
  149.             .$field_id
  150.             .'">'
  151.             .__('Excerpt Length')
  152.             .': </label><input type="text" id="'
  153.             .$field_excerpt_length_id
  154.             .'" name="'
  155.             .$field_excerpt_length
  156.             .'" value="'
  157.             .esc_attr( $instance['excerpt_length'] )
  158.             .'" /></p>';
  159.        
  160.         $field_dot_excerpt_id = $this->get_field_id('dot_excerpt');
  161.         $field_dot_excerpt = $this->get_field_name('dot_excerpt');
  162.        
  163.         if ($instance['dot_excerpt'] == 'on'){
  164.             $checked = 'checked="checked"';
  165.         }
  166.         else {
  167.             $checked = '';
  168.         }
  169.        
  170.         echo "\r\n"
  171.             .'<p><input type="checkbox" id="'
  172.             .$field_dot_excerpt_id
  173.             .'" name="'
  174.             .$field_dot_excerpt
  175.             .'" value="on"'
  176.             .$checked
  177.             .'/> <label for="'
  178.             .$field_dot_excerpt_id
  179.             .'">'
  180.             .__('Show dots after excerpt `[...]`')
  181.             .' </label></p>';
  182.        
  183.         $field_display_title_id = $this->get_field_id('display_title');
  184.         $field_display_title = $this->get_field_name('display_title');
  185.        
  186.        
  187.         if ($instance['display_title'] == 'on'){
  188.             $checked = 'checked="checked"';
  189.         }
  190.         else {
  191.             $checked = '';
  192.         }
  193.        
  194.         echo "\r\n"
  195.             .'<p><input type="checkbox" id="'
  196.             .$field_display_title_id
  197.             .'" name="'
  198.             .$field_display_title
  199.             .'" value="on"'
  200.             .$checked
  201.             .'/> <label for="'
  202.             .$field_display_title_id
  203.             .'">'
  204.             .__('Display Page Title')
  205.             .' </label></p>';
  206.        
  207.         $field_link_title_id = $this->get_field_id('link_title');
  208.         $field_link_title = $this->get_field_name('link_title');
  209.        
  210.         if ($instance['link_title'] == 'on'){
  211.             $checked = 'checked="checked"';
  212.         }
  213.         else {
  214.             $checked = '';
  215.         }
  216.        
  217.         echo "\r\n"
  218.             .'<p><input type="checkbox" id="'
  219.             .$field_link_title_id
  220.             .'" name="'
  221.             .$field_link_title
  222.             .'" value="on"'
  223.             .$checked
  224.             .'/> <label for="'
  225.             .$field_link_title_id
  226.             .'">'
  227.             .__('Link Page Title')
  228.             .' </label></p>';
  229.        
  230.         $field_display_read_more_id = $this->get_field_id('display_read_more');
  231.         $field_display_read_more = $this->get_field_name('display_read_more');
  232.        
  233.         if ($instance['display_read_more'] == 'on'){
  234.             $checked = 'checked="checked"';
  235.         }
  236.         else {
  237.             $checked = '';
  238.         }
  239.        
  240.         echo "\r\n"
  241.             .'<p><input type="checkbox" id="'
  242.             .$field_display_read_more_id
  243.             .'" name="'
  244.             .$field_display_read_more
  245.             .'" value="on"'
  246.             .$checked
  247.             .'/> <label for="'
  248.             .$field_display_read_more_id
  249.             .'">'
  250.             .__('Display Read More Link')
  251.             .' </label></p>';
  252.        
  253.         $field_read_more_label_id = $this->get_field_id('read_more_label');
  254.         $field_read_more_label = $this->get_field_name('read_more_label');
  255.         echo "\r\n"
  256.             .'<p><label for="'
  257.             .$field_read_more_label_id
  258.             .'">'
  259.             .__('Read More Label')
  260.             .': </label><input type="text" id="'
  261.             .$field_read_more_label_id
  262.             .'" name="'
  263.             .$field_read_more_label
  264.             .'" value="'
  265.             .esc_attr( $instance['read_more_label'] ).'"'
  266.             .'placeholder="read full page"'
  267.             .'/></p>';
  268.        
  269.         $field_enable_apply_filters_id = $this->get_field_id('enable_apply_filters');
  270.         $field_enable_apply_filters = $this->get_field_name('enable_apply_filters');
  271.        
  272.         if ($instance['enable_apply_filters'] == 'on'){
  273.             $checked = 'checked="checked"';
  274.         }
  275.         else {
  276.             $checked = '';
  277.         }
  278.        
  279.         echo "\r\n"
  280.             .'<p><input type="checkbox" id="'
  281.             .$field_enable_apply_filters_id
  282.             .'" name="'
  283.             .$field_enable_apply_filters
  284.             .'" value="on"'
  285.             .$checked
  286.             .'/> <label for="'
  287.             .$field_enable_apply_filters_id
  288.             .'">'
  289.             .__('Apply Wordpress filters to the content')
  290.             .' </label></p>';
  291.        
  292.         $field_enable_p_tags_id = $this->get_field_id('enable_p_tags');
  293.         $field_enable_p_tags = $this->get_field_name('enable_p_tags');
  294.        
  295.         if ($instance['enable_p_tags'] == 'on'){
  296.             $checked = 'checked="checked"';
  297.         }
  298.         else {
  299.             $checked = '';
  300.         }
  301.        
  302.         echo "\r\n"
  303.             .'<p><input type="checkbox" id="'
  304.             .$field_enable_p_tags_id
  305.             .'" name="'
  306.             .$field_enable_p_tags
  307.             .'" value="on"'
  308.             .$checked
  309.             .'/> <label for="'
  310.             .$field_enable_p_tags_id
  311.             .'">'
  312.             .__('Enable "p" tags around content')
  313.             .' </label></p>';
  314.        
  315.        
  316.     }
  317.    
  318. /* class end */
  319. }
  320. }
  321.  
  322. add_action('widgets_init', 'page_excerpt_widgets');
  323.  
  324. function page_excerpt_widgets(){
  325.     register_widget('PageExcerptWidget');
  326. }
  327.  
  328. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement