Почему мой пользовательский виджет ломает еще один?

Первый плагин каким-то образом нарушает второй (содержимое второго не отображается вообще):

плагины / признаки-images.php:

<?php /* Plugin Name: Featured Jobs Plugin URI: [Enter your website URL] Description: [Enter brief description of plugin] Version: [Enter version number of plugin (probably 1.0)] Author: [Enter your name] Author URI: [Enter your website URL] */ class Featured_Jobs extends WP_Widget { /** * Register widget with WordPress. */ public function __construct() { parent::__construct( 'featured_jobs', // Base ID 'Featured Jobs', // Name array( 'description' => __( 'A Foo Widget', 'text_domain' ), ) // Args ); } /** * Front-end display of widget. * * @see WP_Widget::widget() * * @param array $args Widget arguments. * @param array $instance Saved values from database. */ public function widget( $args, $instance ) { extract( $args ); $title = apply_filters( 'widget_title', $instance['title'] ); echo $before_widget; if ( ! empty( $title ) ) echo $before_title . $title . $after_title; ?> <ul class="featured-jobs"> <?php // Create and run custom loop $custom_posts = new WP_Query(); $custom_posts->query('post_type=jobs&posts_per_page=8'); while ($custom_posts->have_posts()) : $custom_posts->the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> <li class="see-all-positions"><a href="http://www.pixelmatic.com/open-jobs/">See All Positions >></a></li> </ul> <?php echo $after_widget; } /** * Sanitize widget form values as they are saved. * * @see WP_Widget::update() * * @param array $new_instance Values just sent to be saved. * @param array $old_instance Previously saved values from database. * * @return array Updated safe values to be saved. */ public function update( $new_instance, $old_instance ) { $instance = array(); $instance['title'] = strip_tags( $new_instance['title'] ); return $instance; } /** * Back-end widget form. * * @see WP_Widget::form() * * @param array $instance Previously saved values from database. */ public function form( $instance ) { if ( isset( $instance[ 'title' ] ) ) { $title = $instance[ 'title' ]; } else { $title = __( 'New title', 'text_domain' ); } ?> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label> <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" /> </p> <?php } } // class Foo_Widget // register Foo_Widget widget add_action( 'widgets_init', create_function( '', 'register_widget( "featured_jobs" );' ) ); 

плагины / тема / theme.php:

 add_action( 'widgets_init', create_function( '', 'register_widget( "px_reviews_widget" );' ) ); class Px_Reviews_Widget extends WP_Widget { /** * Register widget with WordPress. */ public function __construct() { parent::__construct( 'px_reviews_widget', // Base ID 'Game - Reviews', // Name array( 'description' => __( 'Game - Reviews', 'text_domain' ), ) // Args ); } /** * Front-end display of widget. * * @see WP_Widget::widget() * * @param array $args Widget arguments. * @param array $instance Saved values from database. */ public function widget( $args, $instance ) { if ( !is_singular('games')) { return; } extract( $args ); $title = 'Reviews';//apply_filters( 'widget_title', $instance['title'] ); echo $before_widget; if ( ! empty( $title ) ) echo $before_title . $title . $after_title; //echo __( 'Hello, World!', 'text_domain' ); $templates = array(); $templates[] = "game-reviews.php"; // Backward compat code will be removed in a future release locate_template($templates, true); echo $after_widget; } /** * Sanitize widget form values as they are saved. * * @see WP_Widget::update() * * @param array $new_instance Values just sent to be saved. * @param array $old_instance Previously saved values from database. * * @return array Updated safe values to be saved. */ public function update( $new_instance, $old_instance ) { $instance = array(); $instance['title'] = strip_tags( $new_instance['title'] ); return $instance; } /** * Back-end widget form. * * @see WP_Widget::form() * * @param array $instance Previously saved values from database. */ public function form( $instance ) { /* if ( isset( $instance[ 'title' ] ) ) { $title = $instance[ 'title' ]; } else { $title = __( 'New title', 'text_domain' ); } */ ?> This widget only show on Game single page <?php /* ?> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label> <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" /> </p> <?php */ } } 

Что может быть причиной?

Ошибка вашего кода из-за ошибки синтаксиса PHP.

Что нужно отметить:

  • Ваша проблема заключается в том, что вы не смогли правильно отложить свой код, что привело к пропущению вещей. Ваш редактор должен иметь возможность повторно указывать код, и при вводе он должен автоматически отступать. Для этого нет никаких оправданий, и это 100% предотвратимая ситуация
  • У вас нет регистрации ошибок. Ошибки должны регистрироваться в файле журнала ошибок, я настоятельно рекомендую вам включить это или найти файл и открыть его 24/7 при разработке
  • Я также предлагаю WP_DEBUG константу WP_DEBUG в wp-config.php
  • Некоторые редакторы (любой полупристойный редактор) могут проверять синтаксические ошибки для вас и выделять их
  • многие редакторы не выбирают сокращенный синтаксис while(): end; , поэтому всегда используйте while(){} . Лучше последовательно использовать тот или иной, а не

Если быть точным, это лишний раз вызывает вашу проблему. Удалите его, и ваш код должен работать должным образом, если нет других проблем. Я оставляю задачу синтаксиса для вас как домашнюю работу. Есть онлайн-шашки, сам PHP может проверить синтаксис, и журнал ошибок покажет его как номер строки, так и причину.