juliocavalcanti

Menu Pages Widget

Sep 13th, 2011 (edited)
353
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. /*
  3. Plugin Name: Menu Pages Widget
  4. Plugin URI: http://www.juliocavalcanti.com
  5. Description: Adds a widget that can display subpages from a parent page.
  6. Author: Julio Cavalcanti
  7. Version: 1.0
  8. Author URI: http://www.juliocavalcanti.com/
  9. */
  10.  
  11. class MenuPages extends WP_Widget {
  12.  
  13.     function MenuPages() {
  14.         parent::WP_Widget(false, $name='Menu Pages');
  15.     }
  16.    
  17.     function widget($args, $instance) {
  18.         extract($args, EXTR_SKIP);
  19.         $title = empty($instance['title']) ? ' ' : apply_filters('widget_title', $instance['title']);
  20.         $page_parent = empty($instance['page_parent']) ? ' ' : apply_filters('widget_page_parent', $instance['page_parent']);
  21.         $number_pages = empty($instance['number_pages']) ? ' ' : apply_filters('widget_number_pages', $instance['number_pages']);
  22.         $show_in_pages = empty($instance['show_in_pages']) ? ' ' : apply_filters('widget_show_in_pages', $instance['show_in_pages']);
  23.        
  24.         if(trim($title)){
  25.         $title = '<h3 class="widget-title">'.$title.'</h3>';
  26.         }else{
  27.         $title = "";
  28.         }
  29.        
  30.         if(trim($number_pages) != "Todos"){
  31.         $number_pages = '&number='.$number_pages;
  32.         }else{
  33.         $number_pages = "";
  34.         }
  35.        
  36.         if(trim($show_in_pages[0]) == ""){
  37.          $show_in_pages = "";
  38.         }
  39.        
  40.         if(is_page($show_in_pages)){
  41.            
  42.             echo $before_widget;
  43.             if(trim($number_pages) != "Todos" && trim($page_parent) != ""){
  44.                 echo "<div class='menu-container'>";
  45.                 echo "<ul class='menu'>";
  46.                
  47.                 if(trim($title)){ echo "<li class='pagenav'>".$title."<ul>";}
  48.                 $pages = get_pages('child_of=' . $page_parent . '&post_type=page&sort_column=menu_order&sort_order=asc&hierarchical=1'.$number_pages);
  49.                
  50.                 foreach ($pages as $pagg) {
  51.                     $item_page="<li class='page_item page-item-".$pagg->ID;
  52.                     if (is_page($pagg->ID)) {
  53.                         $item_page.=" current_page_item";
  54.                     }
  55.                     if($pagg->post_parent !=0 ){
  56.                         $item_page.=" child-item";
  57.                     }
  58.                     $item_page.="'";
  59.                     $item_page.=">";
  60.                     $item_page.="<a title='".$pagg->post_title."' href='".get_page_link($pagg->ID)."'>".$pagg->post_title."</a>";
  61.                     $item_page .= '</li>';
  62.                     echo $item_page;
  63.                 }
  64.                
  65.                 if(trim($title)){ echo "</ul></li>"; }
  66.                
  67.                 echo "</ul>";
  68.                 echo "</div>";
  69.             }else{
  70.                 $nivel_1 = get_post($post->ID);
  71.                 $nivel_2 = get_post($nivel_1->post_parent);
  72.                 $nivel_3 = get_post($nivel_2->post_parent);
  73.                 $nivel_4 = get_post($nivel_3->post_parent);
  74.                 $nivel_5 = get_post($nivel_4->post_parent);
  75.                 $nivel_6 = get_post($nivel_5->post_parent);
  76.                 $nivel_7 = get_post($nivel_6->post_parent);
  77.                
  78.                 if($nivel_1->ID == $nivel_2->ID){
  79.                     $id_secao = $nivel_1->ID;
  80.                 }elseif($nivel_1->ID == $nivel_3->ID){
  81.                     $id_secao = $nivel_2->ID;
  82.                 }elseif($nivel_1->ID == $nivel_4->ID){
  83.                     $id_secao = $nivel_3->ID;
  84.                 }elseif($nivel_1->ID == $nivel_5->ID){
  85.                     $id_secao = $nivel_4->ID;
  86.                 }elseif($nivel_1->ID == $nivel_6->ID){
  87.                     $id_secao = $nivel_5->ID;
  88.                 }else{
  89.                     $id_secao = $nivel_6->ID;
  90.                 }
  91.                
  92.                 $children = wp_list_pages('title_li=&child_of=' . $id_secao.'&echo=0');
  93.                
  94.                 if ($children) {
  95.                     $output_menu = $children;
  96.                 }
  97.                
  98.                 echo "<div class='menu-container'>";
  99.                 echo "<ul class='menu'>";
  100.                 echo $output_menu;
  101.                 echo "</ul>";
  102.                 echo "</div>";
  103.                
  104.             }
  105.             echo $after_widget;
  106.            
  107.         }
  108.     }
  109.    
  110.     function update($new_instance, $old_instance) {
  111.         $instance = $old_instance;
  112.         $instance['title'] = strip_tags($new_instance['title']);
  113.         $instance['page_parent'] = $new_instance['page_parent'];
  114.         $instance['number_pages'] = $new_instance['number_pages'];
  115.         $instance['show_in_pages'] = $new_instance['show_in_pages'];
  116.        
  117.         return $instance;
  118.     }
  119.    
  120.     function form($instance) {
  121.    
  122.         $defaults = array(
  123.             'title' => '',
  124.             'page_parent' => '',
  125.             'number_pages' => '',
  126.             'show_in_pages' => ''
  127.         );
  128.    
  129.         $instance = wp_parse_args( (array) $instance, $defaults );
  130.         $title = strip_tags($instance['title']);
  131.         $page_parent = strip_tags($instance['page_parent']);
  132.         $number_pages = strip_tags($instance['number_pages']);
  133.         $show_in_pages = $instance['show_in_pages'];
  134. ?>
  135.         <p>
  136.             <label for="<?php echo $this->get_field_id('title'); ?>">T&iacute;tulo do Widget:
  137.                 <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo attribute_escape($title); ?>" />
  138.             </label>
  139.         </p>
  140.         <p>
  141.             <label for="<?php echo $this->get_field_id('page_parent'); ?>">Página Pai:
  142.                 <select id="<?php echo $this->get_field_id( 'page_parent' ); ?>" name="<?php echo $this->get_field_name( 'page_parent' ); ?>" class="widefat" style="width:100%;">
  143.                     <option value="">Seleciona a página</option>
  144.                     <?php
  145.                       $pages = get_pages('post_type=page&sort_column=menu_order&sort_order=asc');
  146.                       foreach ($pages as $pagg) {
  147.                         if($pagg->post_parent !=0 ){$spacer = "&nbsp;&nbsp;&nbsp;&nbsp;";}else{$spacer = "";}
  148.                         if ( $pagg->ID == $instance['page_parent'] ){$selected = 'selected="selected"';}else{$selected = '';}
  149.                         $option = '<option value="'.$pagg->ID.'" '.$selected.'>';
  150.                         $option .= $spacer . $pagg->post_title;
  151.                         $option .= '</option>';
  152.                         echo $option;
  153.                       }
  154.                      ?>
  155.                 </select>
  156.             </label>
  157.             <span style="font-size:10px;">Aparecerá na lista as páginas filhas da que for selecionada.</span> </p>
  158.         <p>
  159.             <label for="<?php echo $this->get_field_id('number_pages'); ?>">Mostrar quantos itens na lista?
  160.                 <select id="<?php echo $this->get_field_id( 'number_pages' ); ?>" name="<?php echo $this->get_field_name( 'number_pages' ); ?>" class="widefat" style="width:100%;">
  161.                     <option <?php if ( 'Todos' == $instance['number_pages'] ) echo 'selected="selected"'; ?>>Todos</option>
  162.                     <option <?php if ( '1' == $instance['number_pages'] ) echo 'selected="selected"'; ?>>1</option>
  163.                     <option <?php if ( '2' == $instance['number_pages'] ) echo 'selected="selected"'; ?>>2</option>
  164.                     <option <?php if ( '3' == $instance['number_pages'] ) echo 'selected="selected"'; ?>>3</option>
  165.                     <option <?php if ( '4' == $instance['number_pages'] ) echo 'selected="selected"'; ?>>4</option>
  166.                     <option <?php if ( '5' == $instance['number_pages'] ) echo 'selected="selected"'; ?>>5</option>
  167.                 </select>
  168.             </label>
  169.         </p>
  170.         <label for="<?php echo $this->get_field_id('show_in_pages'); ?>">
  171.         Em quais páginas o widget irá aparecer:
  172.         <ul id="<?php echo $this->get_field_id('show_in_pages'); ?>" style="overflow-x: hidden; height: 200px; width: 100%;">
  173.             <?php
  174.                   $i = 0;
  175.                   $pages = get_pages('post_type=page&sort_column=menu_order&sort_order=asc&hierarchical=1');
  176.                   foreach ($pages as $pagg) {
  177.                     if($pagg->post_parent !=0 ){$spacer = "&nbsp;&nbsp;&nbsp;&nbsp;";}else{$spacer = "";}
  178.                     $option="<li>".$spacer.'<input type="checkbox" id="'. $this->get_field_id( 'show_in_pages' ) .'[]" name="'. $this->get_field_name( 'show_in_pages' ) .'[]"';
  179.                     if (is_array($instance['show_in_pages'])) {
  180.                         foreach ($instance['show_in_pages'] as $pags) {
  181.                             if($pags==$pagg->ID) {
  182.                                 $option=$option.' checked="checked"';
  183.                             }
  184.                         }
  185.                     }
  186.                     $option .= ' value="'. $pagg->ID .'" />&nbsp;&nbsp;';
  187.                     $option .= $pagg->post_title;
  188.                     $option .= '</li>';
  189.                     echo $option;
  190.                     $i++;
  191.                   }
  192.             ?>
  193.         </ul>
  194.         </label>
  195.         <script type="text/javascript">
  196.                 $(document).ready(function(){
  197.                     $("ul#show_in_pages li ul").addClass("children");
  198.                     $("ul#show_in_pages li ul.children").attr("style","padding-left: 20px;");
  199.                 });
  200.         </script>
  201.         <span style="font-size:10px;">O widget aparecerá nas páginas que forem selecionadas na lista.</span>
  202. <?php
  203.     }
  204.  
  205. }
  206.  
  207. add_action( 'widgets_init', create_function('', 'return register_widget("MenuPages");') );
  208. ?>
Advertisement