Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

The first plugin is somehow breaking the second one (the content of the second one doesn't show up at all):

plugins/featured-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" );' ) );

plugins/theme/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 
        */
    }

}

What could be the cause?

share|improve this question
    
What does the error log say? –  Tom J Nowell May 8 '13 at 9:27
    
@Tom J Nowell I don't see any wrror log, the content just disappears. –  janoChen May 8 '13 at 9:35
    
Do you not have error logging turned on? Have you checked the error log file? What exactly do you mean by the second one doesn't show up? Is there nothing after the position the second one should show up? Is it just missing in an otherwise complete page? Ellaborate!! –  Tom J Nowell May 8 '13 at 11:18
add comment

1 Answer

up vote 4 down vote accepted

Your code fails because of a PHP syntax error.

Things to note:

  • Your problem is a result of your failure to indent your code correctly, resulting in things being missed. Your editor should be able to reindent code, and it should auto-indent as you type. There are no excuses for this, and it's a 100% avoidable situation
  • You do not have error logging turned on. Errors should be logged to an error log file, I strongly recommend you turn this on or find the file, and have it open 24/7 while developing
  • I'd also suggest turning on the WP_DEBUG constant in wp-config.php
  • Some editors ( any half decent editor ) can check syntax errors for you and highlight them
  • a lot of editors don't pick up the shorthand syntax of while(): end;, so always use while(){} instead. It's better to consistently use one or the other rather than both

To be precise it's an extra } causing your problem. Remove it and your code should work as expected assuming no other issues are present. I leave the task of syntax checking to you as homework. There are online checkers, PHP itself can check the syntax, and error logging will reveal it, both the line number and the cause.

share|improve this answer
    
I checked the syntax in both functions and indeed there were extra } in both but in both cases the site crashed when I removed them. I'm kind of confused. –  janoChen May 9 '13 at 3:40
    
J Novell strange, I tried this: phpcodechecker.com and no errors. –  janoChen May 9 '13 at 3:46
    
I checked with my editor and there are no errors either. –  janoChen May 9 '13 at 3:53
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.