1

I get the following message when I activate the plugin `The plugin generated 655 characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.'

How can I debug this? I have turned WP_DEBUG on. Any solutions?

<?php
/*
Plugin Name: costing calculator
Description: A costing calculator for the engineering industry
Author: Matthew Pollard
Version: 1.0
*/


register_activation_hook( __FILE__, 'mp_install_countries_table' );
register_activation_hook( __FILE__, 'mp_install_country_data' );
register_activation_hook( __FILE__, 'mp_install_machines_table' );
register_activation_hook( __FILE__, 'mp_install_machines_data' );
register_activation_hook( __FILE__, 'mp_install_settings_table' );
register_activation_hook( __FILE__, 'mp_install_settings_data' );

function mp_install_countries_table()  {
    global $wpdb;
    $table_name = $wpdb->prefix . 'countries';


    $sql = "CREATE TABLE $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        name tinytext NOT NULL,
        labour_cost INT,
        overheads FLOAT,
        profit FLOAT,
        UNIQUE KEY id (id)
    );";

   require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
   dbDelta( $sql );
}

function mp_install_country_data() {

    global $wpdb;

    $table_name = $wpdb->prefix . 'countries';

  $rows =   array(
           array(
            'id' => '1',
            'name' => 'UK',
            'labour_cost' => '20',
            'overheads' => '0.45',
            'profit' => '0.22'     
        ),
        array(
            'id' => '2',
            'name' =>'james',
            'labour_cost' => '6',
            'overheads' => '0.27',
            'profit' => '0.17'  
        )
    );  

    foreach( $rows as $row )
    {
    $wpdb->insert( $table_name, $row);
    }
}

  //creating machines table
function mp_install_machines_table() {
global $wpdb;
    $table_name2 = $wpdb->prefix . 'machines';

 $sql2= "CREATE TABLE $table_name2 (
          id int(11) NOT NULL AUTO_INCREMENT,
          name varchar(255) DEFAULT NULL,
          rate int(11) NOT NULL,
          UNIQUE KEY id (id)
          ) ; ";
          require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
          dbDelta ( $sql2 );
          }
 // populate machines table
function mp_install_machines_data() {
global $wpdb;
$table_name_mach_in = $wpdb->prefix . 'machines';

  $machine_id = '1';
  $machine_name  = 'robot spot welder';
  $machine_rate = '91';   

      $rows_affectedmac = $wpdb->insert( $table_name_mach_in, array( 'id' => $machine_id, 'name' => $machine_name, 'rate' => $machine_rate ));
     require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
     dbDelta( $rows_affectedmac );
  }

  //creating settings table
function mp_install_settings_table() {
global $wpdb;
    $table_name3 = $wpdb->prefix . 'settings';

 $sql5= "CREATE TABLE $table_name3 (
          id int(11) NOT NULL AUTO_INCREMENT,
          robot_constructional INT,
          robot_stitching FLOAT,
          robot_addr_in FLOAT,
          robot_addr_out FLOAT,
          UNIQUE KEY id (id)
          ) ; ";
          require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
          dbDelta ( $sql5 );
          }  
 //populate settings table
  function mp_install_settings_data() {
global $wpdb;
$table_name_sett_in = $wpdb->prefix . 'settings';

  $setting_id = '1';
  $setting_con  = '3';
  $setting_stitc = '1.8';     
  $setting_rob_in = '2.4';
  $setting_rob_out =  '2.4';
      $rows_affectedset = $wpdb->insert( $table_name_sett_in, array( 'id' => $setting_id, 'robot_constructional' => $setting_con, 'robot_stitching' => $setting_stitc, 'robot_addr_in' => $setting_rob_in, 'robot_addr_out' => $setting_rob_out ));
     require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
     dbDelta( $rows_affectedset );
  }
  // end of  create table and populating

 // deadctivate the plugin and delete tables
 function mp_uninstall_countries_table() {
  global $wpdb;
  $thetable = $wpdb->prefix. 'countries';
  //Delete any options that's stored also?
   // delete_option('wp_yourplugin_version');
  $wpdb->query("DROP TABLE IF EXISTS $thetable");
} 

 register_deactivation_hook( __FILE__, 'mp_uninstall_countries_table') ;  


//include jquery
add_action( 'wp_enqueue_script', 'load_jquery2' );
function load_jquery2() {
    wp_enqueue_script( 'jquery' );
}      

function add_my_css_and_my_js_files(){
    wp_enqueue_script('jquery-validate-min', plugins_url('activate/jquery_validate_min.js', __FILE__ ) );
}
add_action('wp_enqueue_scripts', "add_my_css_and_my_js_files");

// shortcode to display calcs
add_action( 'init', 'register_shortcodes');
function register_shortcodes() {
add_shortcode( 'displaycalcs', 'mp_calcs_display' );
}

function mp_calcs_display() {
return '
<form name="calsinput" action="" method="post" id="calsinput" >
<h1> Process </h1>
<p> operation type always robot </p>
<br> <br>
Number of welds: <input type="number" name="numberofwelds" class="required digits" title="This field is required and must be a no."  >
<br> <br>
Number of construction welds: <input type="number" name="numberofconwelds" class="required digits"  title="This field is required and must be a no.">
<br> <br>
<h2> Outputs </h2>
<br> <br>
Robot in/out: <input type="text" name="robotinout" disabled>
<br> <br>
Weld time: <input type="text" name="weldtime" disabled>
<br> <br>
Controlling cycle: <input type="text" name="concycle" disabled> 
<br> <br>
Total time(secs): <input type="text" name="totaltimesecs" disabled>
<br> <br> <br> <br>
<input type="submit" value="Calculate cycle time ">
</form>  

<script type="text/javascript">
    jQuery(document).ready(function($) {
        $("#calsinput").validate();
    });  
</script>';
}
  • Make sure there is no characters or whitespace before the <?php or after the ?> – Rachel Baker Jan 28 '14 at 19:40
  • There is only one <?php which is one the first line, & has no white space in front. The wordpress comment block starts on the line immediately after, so it can't be that . Thanks – mattnewbie Jan 28 '14 at 19:42
  • Can you provide the code of your plugin that is causing the error? – Rachel Baker Jan 28 '14 at 19:43
  • Could it be caused by using 1register_activation_hook` hook? I have used this function 6 times (3 for custom tables & 3 for populating the tables). I know I should probably write this more efficiently. – mattnewbie Jan 28 '14 at 19:43
  • @RachelBaker I've pasted the code above. Including comments & the opening php, in case they are relevant. Thanks – mattnewbie Jan 28 '14 at 19:45
3

The issue appears to be in the formatting of your mp_calcs_display() function. I modified the function to use the heredoc syntax for your html output, and was then able to activate the plugin successfully.

 function mp_calcs_display() {
    $output = <<<HTML
<form name="calsinput" action="" method="post" id="calsinput" ><h1> Process </h1>
<p> operation type always robot </p>
<br> <br>
Number of welds: <input type="number" name="numberofwelds" class="required digits" title="This field is required and must be a no."  >
<br> <br>
Number of construction welds: <input type="number" name="numberofconwelds" class="required digits"  title="This field is required and must be a no.">
<br> <br>
<h2> Outputs </h2>
<br> <br>
Robot in/out: <input type="text" name="robotinout" disabled>
<br> <br>
Weld time: <input type="text" name="weldtime" disabled>
<br> <br>
Controlling cycle: <input type="text" name="concycle" disabled>
<br> <br>
Total time(secs): <input type="text" name="totaltimesecs" disabled>
<br> <br> <br> <br>
<input type="submit" value="Calculate cycle time ">
</form>
<script type="text/javascript">
    jQuery(document).ready(function($) {
        $("#calsinput").validate();
    });</script>
HTML;

    return $output;
}

Full plugin file with above fix that was used for testing: https://gist.github.com/rachelbaker/ac13110e19321aed45ae

  • 1
    @mattnewbie No problem. Let me know if you have any issues. – Rachel Baker Jan 28 '14 at 20:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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