juliocavalcanti icon

Menu Pages Widget

juliocavalcanti | PRO | 06/28/25 12:25:02 AM UTC (Edited) | 0 ⭐ | 7208 👁️ | Never ⏰ | []
PHP Brief |

0 B

|

None

|

0 👍

/

0 👎

<?php
/*
Plugin Name: Menu Pages Widget
Plugin URI: http://www.juliocavalcanti.com
Description: Adds a widget that can display subpages from a parent page.
Author: Julio Cavalcanti
Version: 1.0
Author URI: http://www.juliocavalcanti.com/
*/
 
class MenuPages extends WP_Widget {
 
    function MenuPages() {
        parent::WP_Widget(false, $name='Menu Pages');
    }
    
    function widget($args, $instance) {
        extract($args, EXTR_SKIP);
        $title = empty($instance['title']) ? ' ' : apply_filters('widget_title', $instance['title']);
        $page_parent = empty($instance['page_parent']) ? ' ' : apply_filters('widget_page_parent', $instance['page_parent']);
        $number_pages = empty($instance['number_pages']) ? ' ' : apply_filters('widget_number_pages', $instance['number_pages']);
        $show_in_pages = empty($instance['show_in_pages']) ? ' ' : apply_filters('widget_show_in_pages', $instance['show_in_pages']);
        
        if(trim($title)){
        $title = '<h3 class="widget-title">'.$title.'</h3>';
        }else{
        $title = "";
        }
        
        if(trim($number_pages) != "Todos"){
        $number_pages = '&number='.$number_pages;
        }else{
        $number_pages = "";
        }
        
        if(trim($show_in_pages[0]) == ""){
         $show_in_pages = "";
        }
        
        if(is_page($show_in_pages)){
            
            echo $before_widget;
            if(trim($number_pages) != "Todos" && trim($page_parent) != ""){ 
                echo "<div class='menu-container'>";
                echo "<ul class='menu'>";
                
                if(trim($title)){ echo "<li class='pagenav'>".$title."<ul>";}
                $pages = get_pages('child_of=' . $page_parent . '&post_type=page&sort_column=menu_order&sort_order=asc&hierarchical=1'.$number_pages);
                
                foreach ($pages as $pagg) {
                    $item_page="<li class='page_item page-item-".$pagg->ID;
                    if (is_page($pagg->ID)) {
                        $item_page.=" current_page_item";
                    }
                    if($pagg->post_parent !=0 ){
                        $item_page.=" child-item";
                    }
                    $item_page.="'";
                    $item_page.=">";
                    $item_page.="<a title='".$pagg->post_title."' href='".get_page_link($pagg->ID)."'>".$pagg->post_title."</a>";
                    $item_page .= '</li>';
                    echo $item_page;
                }
                
                if(trim($title)){ echo "</ul></li>"; }
                
                echo "</ul>";
                echo "</div>";
            }else{ 
                $nivel_1 = get_post($post->ID);
                $nivel_2 = get_post($nivel_1->post_parent);
                $nivel_3 = get_post($nivel_2->post_parent);
                $nivel_4 = get_post($nivel_3->post_parent);
                $nivel_5 = get_post($nivel_4->post_parent);
                $nivel_6 = get_post($nivel_5->post_parent);
                $nivel_7 = get_post($nivel_6->post_parent);
                
                if($nivel_1->ID == $nivel_2->ID){
                    $id_secao = $nivel_1->ID;
                }elseif($nivel_1->ID == $nivel_3->ID){
                    $id_secao = $nivel_2->ID;
                }elseif($nivel_1->ID == $nivel_4->ID){
                    $id_secao = $nivel_3->ID;
                }elseif($nivel_1->ID == $nivel_5->ID){
                    $id_secao = $nivel_4->ID;
                }elseif($nivel_1->ID == $nivel_6->ID){
                    $id_secao = $nivel_5->ID;
                }else{
                    $id_secao = $nivel_6->ID;
                }
                
                $children = wp_list_pages('title_li=&child_of=' . $id_secao.'&echo=0');
                
                if ($children) {
                    $output_menu = $children;
                }
                
                echo "<div class='menu-container'>";
                echo "<ul class='menu'>";
                echo $output_menu;
                echo "</ul>";
                echo "</div>";
                
            }
            echo $after_widget;
            
        }
    }
    
    function update($new_instance, $old_instance) {
        $instance = $old_instance;
        $instance['title'] = strip_tags($new_instance['title']);
        $instance['page_parent'] = $new_instance['page_parent'];
        $instance['number_pages'] = $new_instance['number_pages'];
        $instance['show_in_pages'] = $new_instance['show_in_pages'];
        
        return $instance;
    }
    
    function form($instance) {
    
        $defaults = array(
            'title' => '',
            'page_parent' => '',
            'number_pages' => '',
            'show_in_pages' => ''
        );
    
        $instance = wp_parse_args( (array) $instance, $defaults );
        $title = strip_tags($instance['title']);
        $page_parent = strip_tags($instance['page_parent']);
        $number_pages = strip_tags($instance['number_pages']);
        $show_in_pages = $instance['show_in_pages'];
?>
        <p>
            <label for="<?php echo $this->get_field_id('title'); ?>">T&iacute;tulo do Widget:
                <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); ?>" />
            </label>
        </p>
        <p>
            <label for="<?php echo $this->get_field_id('page_parent'); ?>">Página Pai:
                <select id="<?php echo $this->get_field_id( 'page_parent' ); ?>" name="<?php echo $this->get_field_name( 'page_parent' ); ?>" class="widefat" style="width:100%;">
                    <option value="">Seleciona a página</option>
                    <?php
                      $pages = get_pages('post_type=page&sort_column=menu_order&sort_order=asc');
                      foreach ($pages as $pagg) {
                        if($pagg->post_parent !=0 ){$spacer = "&nbsp;&nbsp;&nbsp;&nbsp;";}else{$spacer = "";}
                        if ( $pagg->ID == $instance['page_parent'] ){$selected = 'selected="selected"';}else{$selected = '';}
                        $option = '<option value="'.$pagg->ID.'" '.$selected.'>';
                        $option .= $spacer . $pagg->post_title;
                        $option .= '</option>';
                        echo $option;
                      }
                     ?>
                </select>
            </label>
            <span style="font-size:10px;">Aparecerá na lista as páginas filhas da que for selecionada.</span> </p>
        <p>
            <label for="<?php echo $this->get_field_id('number_pages'); ?>">Mostrar quantos itens na lista?
                <select id="<?php echo $this->get_field_id( 'number_pages' ); ?>" name="<?php echo $this->get_field_name( 'number_pages' ); ?>" class="widefat" style="width:100%;">
                    <option <?php if ( 'Todos' == $instance['number_pages'] ) echo 'selected="selected"'; ?>>Todos</option>
                    <option <?php if ( '1' == $instance['number_pages'] ) echo 'selected="selected"'; ?>>1</option>
                    <option <?php if ( '2' == $instance['number_pages'] ) echo 'selected="selected"'; ?>>2</option>
                    <option <?php if ( '3' == $instance['number_pages'] ) echo 'selected="selected"'; ?>>3</option>
                    <option <?php if ( '4' == $instance['number_pages'] ) echo 'selected="selected"'; ?>>4</option>
                    <option <?php if ( '5' == $instance['number_pages'] ) echo 'selected="selected"'; ?>>5</option>
                </select>
            </label>
        </p>
        <label for="<?php echo $this->get_field_id('show_in_pages'); ?>">
        Em quais páginas o widget irá aparecer:
        <ul id="<?php echo $this->get_field_id('show_in_pages'); ?>" style="overflow-x: hidden; height: 200px; width: 100%;">
            <?php
                  $i = 0;
                  $pages = get_pages('post_type=page&sort_column=menu_order&sort_order=asc&hierarchical=1');
                  foreach ($pages as $pagg) {
                    if($pagg->post_parent !=0 ){$spacer = "&nbsp;&nbsp;&nbsp;&nbsp;";}else{$spacer = "";}
                    $option="<li>".$spacer.'<input type="checkbox" id="'. $this->get_field_id( 'show_in_pages' ) .'[]" name="'. $this->get_field_name( 'show_in_pages' ) .'[]"';
                    if (is_array($instance['show_in_pages'])) {
                        foreach ($instance['show_in_pages'] as $pags) {
                            if($pags==$pagg->ID) {
                                $option=$option.' checked="checked"';
                            }
                        }
                    }
                    $option .= ' value="'. $pagg->ID .'" />&nbsp;&nbsp;';
                    $option .= $pagg->post_title;
                    $option .= '</li>';
                    echo $option;
                    $i++;
                  }
            ?>
        </ul>
        </label>
        <script type="text/javascript">
                $(document).ready(function(){
                    $("ul#show_in_pages li ul").addClass("children");
                    $("ul#show_in_pages li ul.children").attr("style","padding-left: 20px;");
                });
        </script> 
        <span style="font-size:10px;">O widget aparecerá nas páginas que forem selecionadas na lista.</span>
<?php
    }
 
}
 
add_action( 'widgets_init', create_function('', 'return register_widget("MenuPages");') );
?>

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎