Title: Plugin echo error
Last modified: June 26, 2022

---

# Plugin echo error

 *  Resolved [kmsgli](https://wordpress.org/support/users/kmsgli/)
 * (@kmsgli)
 * [3 years, 11 months ago](https://wordpress.org/support/topic/plugin-echo-error/)
 * Hey folks, new to plugin development and I imagine someone will be able to tell
   me exactly what is happening here rather easily.
 * I did not attach a website link as it only shows the error on the back end and
   the code works as expected I just cant figure out why I am getting this error.
 * I made a simple plugin that is an unsubscribe input box entry so when you put
   in an email address the server sends an email to the server admin that someone
   would like to unsubscribe (I know a plugin probably already exists for this but
   I am more trying to learn than anything else)
 * here is my code;
 *     ```
       function email_unsubscribe(){
       echo "<form action='' method='post'>";
       echo "<input type='email' id='email' name='email'><br><br>";
       echo "<input type='submit'></form>";
   
       if (!empty($_POST)) {
           $email = $_POST['email'];
   
           echo $email;  ///just echo for testing so I dont get emails
           }
   
       }
       add_shortcode( 'unsubscribe', 'email_unsubscribe' );
   
       ?>
       ```
   
 * When I use the shortcode [unsubscribe] and hit update I get the error;
    `Updating
   failed. The response is not a valid JSON response.`
 * However when I go to that page the input box is there and it works correctly.
   
   I have noticed the echo command seems to be the reason this is happening.
 * What am I missing?

Viewing 8 replies - 1 through 8 (of 8 total)

 *  Moderator [threadi](https://wordpress.org/support/users/threadi/)
 * (@threadi)
 * [3 years, 11 months ago](https://wordpress.org/support/topic/plugin-echo-error/#post-15771959)
 * The error message you mentioned occurs when something is sent via AJAX and the
   data it contains is unexpected. My guess is that you have a JavaScript in your
   project that sends all form data via AJAX – but that’s not what you want in this
   case, you want to process them directly yourself first.
 * My recommendation: deactivate all plugins and leave only your plugin active. 
   Also use a standard theme like TwentyTwentyOne to test the function.
 *  Thread Starter [kmsgli](https://wordpress.org/support/users/kmsgli/)
 * (@kmsgli)
 * [3 years, 11 months ago](https://wordpress.org/support/topic/plugin-echo-error/#post-15772193)
 * I have tried my plugin between two sites I maintain with the same issue and different
   themes on each site.
 * Either way I have tried deactivating everything but the plugin I am working on
   and activating twenty twenty one theme.
 * Still the issue persists.
 * Unsure if this is helpful but I have multiple WordPress installations on one 
   server using different folders for each website in the /srv/http/ folder (using
   Apache vhosts to direct traffic). This all works great and I have not had any
   issues setup this way however I read somewhere this error can arise if in the
   general settings you do not make site address example.com/root_of_wordpress_install/
 * I tried this but it would not allow me to login as I kept site url with the scheme
   example.com/ as I do not want to change that for each site (had to go into the
   database and change the site address back to gain access again).
 * Is this possibly my issue or am I going down the wrong path as my current setup
   works fine other then this strange issue?
    -  This reply was modified 3 years, 11 months ago by [kmsgli](https://wordpress.org/support/users/kmsgli/).
 *  [Dion](https://wordpress.org/support/users/diondesigns/)
 * (@diondesigns)
 * [3 years, 11 months ago](https://wordpress.org/support/topic/plugin-echo-error/#post-15774336)
 * Try replacing `if (!empty($_POST)) {` with:
 * `if (!empty($_POST['email'])) {`
 * Your original code will throw a PHP notice (7.4-) or warning (8.0+) if `$_POST`
   exists but `$_POST['email']` does not. I believe the Gutenberg editor uses POST
   requests to the REST API to display content, so the PHP notice/error would always
   be triggered.
 *  Moderator [bcworkz](https://wordpress.org/support/users/bcworkz/)
 * (@bcworkz)
 * [3 years, 11 months ago](https://wordpress.org/support/topic/plugin-echo-error/#post-15774804)
 * I don’t see why `echo` would cause an error, but all the same you are not supposed
   to echo out (or produce any kind of output) from within a shortcode callback.
   Instead, collect all intended output into a single variable and return that variable.
 * What could cause a problem is failing to return any sort of string value. Usually
   the only ill effect from echoing is the output ends up in the wrong place on 
   the page. In some shortcode usage, location doesn’t make any noticeable difference.
   Even so, echoing is still doing it wrong.
 *  Moderator [threadi](https://wordpress.org/support/users/threadi/)
 * (@threadi)
 * [3 years, 11 months ago](https://wordpress.org/support/topic/plugin-echo-error/#post-15775368)
 * Now I just understand what is meant by “hit update”. If you paste the above code
   into functions.php and then try to use in the Gutenberg editor the shortcode
 * `[unsubscribe]`
 * in the Gutenberg editor and _hit the update-button there_, you will get an AJAX
   error because the echo output will cause the code to be executed immediately 
   and output directly.
 * Correct would be like this:
 *     ```
       function email_unsubscribe(){
           ob_start();
           echo "<form action='' method='post'>";
           echo "<input type='email' id='email' name='email'><br><br>";
           echo "<input type='submit'></form>";
   
           if ( ! empty( $_POST ) ) {
               $email = $_POST['email'];
   
               echo $email;  ///just echo for testing so I dont get emails
           }
           return ob_get_clean();
       }
       add_shortcode( 'unsubscribe', 'email_unsubscribe' );
       ```
   
 * See also the manual for add_shortcode(), there is a comment that shows the way
   very well: [https://developer.wordpress.org/reference/functions/add_shortcode/](https://developer.wordpress.org/reference/functions/add_shortcode/)
 *  Thread Starter [kmsgli](https://wordpress.org/support/users/kmsgli/)
 * (@kmsgli)
 * [3 years, 11 months ago](https://wordpress.org/support/topic/plugin-echo-error/#post-15775878)
 * [@bcworkz](https://wordpress.org/support/users/bcworkz/) I believe you are talking
   about something like this?
 *     ```
       $form_var = "<form action='' method='post'>
       <input type='email' id='email' name='email'><br><br>
       <input type='submit'></form>";
   
       return $form_var;
       ```
   
 * That no longer gives an error but it does not post the results as expected when
   submit is hit.
 * [@threadi](https://wordpress.org/support/users/threadi/) you solution works perfectly,
   just so I understand this is an issue with echo occurring to quickly so the ob_star()/
   ob_get() command places that function into a buffer and is executed later avoiding
   the issue entirely?
 *  Moderator [threadi](https://wordpress.org/support/users/threadi/)
 * (@threadi)
 * [3 years, 11 months ago](https://wordpress.org/support/topic/plugin-echo-error/#post-15775900)
 * The reason is mentioned in the manual entry I linked to add_shortcode:
 * `Note that the function called by the shortcode should never produce an output
   of any kind. Shortcode functions should return the text that is to be used to
   replace the shortcode.`
 * With the output buffer functions you collect the output and then return it via
   return from the callback function.
 *  Thread Starter [kmsgli](https://wordpress.org/support/users/kmsgli/)
 * (@kmsgli)
 * [3 years, 11 months ago](https://wordpress.org/support/topic/plugin-echo-error/#post-15775925)
 * [@threadi](https://wordpress.org/support/users/threadi/)
    Thank you so much for
   your help, it is much appreciated I will mark this as resolved.

Viewing 8 replies - 1 through 8 (of 8 total)

The topic ‘Plugin echo error’ is closed to new replies.

 * In: [Developing with WordPress](https://wordpress.org/support/forum/wp-advanced/)
 * 8 replies
 * 4 participants
 * Last reply from: [kmsgli](https://wordpress.org/support/users/kmsgli/)
 * Last activity: [3 years, 11 months ago](https://wordpress.org/support/topic/plugin-echo-error/#post-15775925)
 * Status: resolved

## Topics

### Topics with no replies

### Non-support topics

### Resolved topics

### Unresolved topics

### All topics
