Как правильно отредактировать виджет в вордпресе? Я наследую тему, создаю дочернюю, в которой все, что нужно, перезаписываю. Но столкнулся с трудностью: в родительской теме не предусмотрена проверка на содержание функции и класса в описании виджетов 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.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Подскажите, мне нужно вручную задать url-страницыТо есть к примеру в форме ввожу имя "aboutus", записывает в базы данных, и создается страница с таким...
Есть переменные с функцией eregi_replace, с сожалению функция давно устарелаПодскажите пример как на php 7 то же самое сделать
Насколько я знаю, использование prepared statement уже само по себе гарантированная защита от SQL инъекций (тк