Как правильно отредактировать виджет?

280
30 мая 2018, 05:10

Как правильно отредактировать виджет в вордпресе? Я наследую тему, создаю дочернюю, в которой все, что нужно, перезаписываю. Но столкнулся с трудностью: в родительской теме не предусмотрена проверка на содержание функции и класса в описании виджетов if(function_exists) и if(class_exists). Таким образом, переопределить класс не получится, так как получим фатал эррор? Как правильно вносить изменения в таком случае в виджеты?

Код виджета

add_action('widgets_init', 'editorialmagpro_category_tabs_posts_widget');

function editorialmagpro_category_tabs_posts_widget() {
    register_widget('editorialmagpro_category_tabs_posts_widget_area');
}
class editorialmagpro_category_tabs_posts_widget_area extends WP_Widget {
/**
 * Register widget with WordPress.
*/
function debug($data){
    echo '<pre>';
    var_dump($data);
    echo '</pre>';
}
public function __construct() {
    parent::__construct(
        'emag_magazine_category_tabs_posts', esc_html_x('EMag Category Tabs Posts', 'widget name', 'editorialmag-pro'),
        array(
            'classname' => 'emag_magazine_category_tabs_posts',
            'description' => esc_html__('Widget display category posts in tabs layout', 'editorialmag-pro'),
            'customize_selective_refresh' => true
        )
    );
}
private function widget_fields() {
    $args = array(
        'type'       => 'tribe_events',
        'child_of'   => 0,
        'orderby'    => 'name',
        'order'      => 'ASC',
        'hide_empty' => 1,
        'taxonomy'   => 'tribe_events_cat',
    );
    $categories = get_categories( $args );
    $cat_lists = array();
    foreach ($categories as $category) {
        $cat_lists[$category->term_id] = $category->name;
    }
    $fields = array(
        'editorialmagpro_category_list' => array(
            'editorialmagpro_widgets_name' => 'editorialmagpro_category_list',
            'editorialmagpro_mulicheckbox_title' => esc_html__('Select Posts Category', 'editorialmag-pro'),
            'editorialmagpro_widgets_field_type' => 'multicheckboxes',
            'editorialmagpro_widgets_field_options' => $cat_lists
        ),
        'editorialmagpro_block_display_order' => array(
            'editorialmagpro_widgets_name' => 'editorialmagpro_block_display_order',
            'editorialmagpro_widgets_title' => esc_html__('Choose Posts Display Order', 'editorialmag-pro'),
            'editorialmagpro_widgets_field_type' => 'select',
            'editorialmagpro_widgets_field_options' => array('DESC' => 'DESC', 'ASC' => 'ASC')
        ),
        'editorialmagpro_block_display_number_posts' => array(
            'editorialmagpro_widgets_name' => 'editorialmagpro_block_display_number_posts',
            'editorialmagpro_widgets_title' => esc_html__('Enter Display Number of Posts', 'editorialmag-pro'),
            'editorialmagpro_widgets_field_type' => 'number',
        ),
        'editorialmagpro_block_disable_meta_info' => array(
            'editorialmagpro_widgets_name' => 'editorialmagpro_block_disable_meta_info',
            'editorialmagpro_widgets_title' => esc_html__('Checked To Disable Meta Information', 'editorialmag-pro'),
            'editorialmagpro_widgets_field_type' => 'checkbox',
        ),

    );
    return $fields;
}
public function widget($args, $instance) {
    extract($args);
    get_categories('');
    /**
     * wp query for first block
    */
    $nposts        = empty( $instance['editorialmagpro_block_display_number_posts'] ) ? 5 : $instance['editorialmagpro_block_display_number_posts'];
    $dorder        = empty( $instance['editorialmagpro_block_display_order'] ) ? 'DESC' : $instance['editorialmagpro_block_display_order'];
    $tablayout     = empty( $instance['editorialmagpro_block_display_layout'] ) ? 'one' : $instance['editorialmagpro_block_display_layout'];
    $category_list = empty( $instance['editorialmagpro_category_list'] ) ? '' : $instance['editorialmagpro_category_list'];
    $minfo         = empty( $instance['editorialmagpro_block_disable_meta_info'] ) ? '' : $instance['editorialmagpro_block_disable_meta_info'];
    if(!empty( $category_list )){
        $first_cat_id =  key( $category_list );
        $first_cat_slug = get_term_by( 'id', $first_cat_id , 'tribe_events_cat' );
        $first_cat_slug = $first_cat_slug->slug;
    }
    echo $before_widget; 
?>  
    <div class="emag-tabs-product-wrap">
        <div class="emag-tabs">
            <ul class="emag-tab-links" data-id="<?php echo intval( $nposts ); ?>" meta-info="<?php echo intval( $minfo ); ?>">
                <?php
                    if(!empty($category_list)){
                        $count = 1;
                        foreach ($category_list as $key => $emag_id) {
                            $term = get_term_by( 'id', $key, 'tribe_events_cat');
                        if(!empty( $term )){
                        ?>
                            <li <?php if($count == 1){ ?>class="active"<?php } ?> >
                                <a href="<?php echo esc_attr( $term->slug ); ?>">
                                    <?php echo esc_attr( $term->name ); ?>
                                </a>
                            </li>
                        <?php } $count++; 
                        }
                    }
                ?>
            </ul>
        </div>
        <div class="emag-tab-content">
            <div class="emag-preloader" style="display: none;">
                <img src="<?php echo esc_url( get_template_directory_uri() ); ?>/assets/images/AjaxLoader.gif">
            </div>
            <div class="tabs-product-area <?php echo esc_attr( $first_cat_slug ); ?>" data-slug="<?php echo esc_attr( $first_cat_slug ); ?>">
                <div class="news-with-grid-layout">
                    <div class="news-with-grid-layout-wrap clearfix">
                        <?php 
                            $args = array(
                                'post_type' => 'tribe_events',
                                'order'   => $dorder,
                                'tax_query' => array(
                                    array(
                                        'taxonomy'  => 'tribe_events_cat',
                                        'field'     => 'term_id', 
                                        'terms'     => $first_cat_id
                                    )),
                                'posts_per_page' => $nposts
                            );
                            $query = new WP_Query($args);
                            if($query->have_posts()) { while($query->have_posts()) { $query->the_post();
                            $image = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'editorialmagpro-afisza', true);/*editorialmagpro-normal-image*/
                        ?>
                            <div class="news-with-grid-block equalheight">
                                <?php if( has_post_thumbnail() ){ ?>
                                    <figure>
                                        <a href="<?php the_permalink(); ?>">
                                            <img src="<?php echo esc_url( $image[0] ); ?>" alt="<?php the_title(); ?>" title="<?php the_title(); ?>">
                                        </a>
                                    </figure>
                                <?php } ?>
                                <div class="news-content">
                                    <h3 class="news-title">
                                        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                                    </h3>
                                    <?php if($minfo != 1){ ?>
                                        <div class="news-block-footer">
                                            <div class="news-date">
                                                <i class="icofont fa fa-clock-o"></i> <a href="<?php the_permalink(); ?>"><?php the_time( get_option( 'date_format' ) ); ?></a>
                                            </div>
                                            <div class="news-comment">
                                                <i class="icofont fa fa-commenting"></i> <?php comments_popup_link( esc_html__( 'No comment', 'editorialmag-pro' ), esc_html__( '1 Comment', 'editorialmag-pro' ), esc_html__( '% Comments', 'editorialmag-pro' ) ); ?>
                                            </div>
                                        </div>
                                    <?php } ?>
                                </div>
                            </div>                                
                        <?php } } wp_reset_query(); ?>
                    </div>
                </div>
            </div>
        </div>
    </div>
<?php
    echo $after_widget;
}
public function update($new_instance, $old_instance) {
    $instance = $old_instance;
    $widget_fields = $this->widget_fields();
    foreach ($widget_fields as $widget_field) {
        extract($widget_field);
        $instance[$editorialmagpro_widgets_name] = editorialmagpro_widgets_updated_field_value( $widget_field, $new_instance[$editorialmagpro_widgets_name] );
        $this->debug($instance[$editorialmagpro_widgets_name]);
    }
    return $instance;
}
public function form($instance) {
    $widget_fields = $this->widget_fields();
    foreach ( $widget_fields as $widget_field ) {
        extract( $widget_field );
        $editorialmagpro_widgets_field_value = !empty( $instance[ $editorialmagpro_widgets_name ] ) ? $instance[ $editorialmagpro_widgets_name ] : '';
        editorialmagpro_widgets_show_widget_field( $this, $widget_field, $editorialmagpro_widgets_field_value );
    }
}

Смысл в том, как правильно его наследовать в дочерней теме? Дублировать не хотелось бы т.к. он делает половину, половина реализована через AJAX.

READ ALSO
Задание роутов в популярных php-frameworks

Задание роутов в популярных php-frameworks

Подскажите, мне нужно вручную задать url-страницыТо есть к примеру в форме ввожу имя "aboutus", записывает в базы данных, и создается страница с таким...

187
Не срабатывает if - условие

Не срабатывает if - условие

Всем приветПроблема заключается в том, что не срабатывает

165
Замена функции eregi_replace в новой версии PHP

Замена функции eregi_replace в новой версии PHP

Есть переменные с функцией eregi_replace, с сожалению функция давно устарелаПодскажите пример как на php 7 то же самое сделать

205
PDO: Защита от SLQ инъекций

PDO: Защита от SLQ инъекций

Насколько я знаю, использование prepared statement уже само по себе гарантированная защита от SQL инъекций (тк

215