2

I have a custom plugin, using a custom post type for data entry capabilities in the admin section. I would like to use a textarea form, along with the checkboxes, select and text input fields I am presently using. However when I update the bost, my call back receives all the other input fields, not not the textarea field.

The code is rather large, covering lots of different input types, this is a refinement of that draw and save call:

function  CustomInput()
{
add_meta_box( 'List_Group1',
           __( 'Lists - Card Records : Manual Input', 'myplugin_textdomain'  ),
              'DrawCallBack',
              'customlist',
               'normal',
               'high',
               $args
               );           
 }
 add_action( 'add_meta_boxes', 'CustomInput' );
 add_action( 'save_post', 'SaveFields');


function DrawCallBack($post)
{
$Record = GetDBRecord();
echo '<textarea id="bizdesc" rows="2" cols="50">';
echo $Record['BizDescp'];
echo  '</textarea>';

echo '<input type=text id="YourName" name="YourName"  value="' .$Record['Name'] .'"/>'
}


function SaveFields($post_id)
{
$screen = get_current_screen();
if(strcmp($screen->post_type, 'customlist') !=0)
   return;

$Desc = sanitize_text_field( $_POST[ 'bizdesc ' ] ); 
$Name = sanitize_text_field( $_POST[ 'YourName' ] ); 
}

The standard input field comes in nicely and correctly. The textarea field does not. Not sure why?

Any ideas?

  • 3
    Your textarea doesn't have a name. – Sally CJ Mar 9 at 1:12
  • 1
    Is there code missing from SaveFields? All it does is assign variables, but I don't see any code that saves those variables to a database/file/etc – Tom J Nowell Mar 9 at 2:21
  • Tom, no code is missing. The code that pulls the values is the _POST. – Debbie Kurth Mar 9 at 18:17
  • Found the problem. Partially to Sally, who made me look at the input names more closely. Name mismatch in a another part of the code. Thanks for your help Sally. – Debbie Kurth Mar 9 at 18:18
0

Problem solved. It was a field naming problem.

  • In that case, up-vote the answer which helped you solve the problem and select it as accepted answer, This will help other to find correct answer. Thanks. – Qaisar Feroz Mar 10 at 19:28
  • truly that was the answer. I wrote the question, the name of the field was wrong. – Debbie Kurth Mar 11 at 0:02
4

You forgot to add name ="bizdesc" to your textarea, so this

function DrawCallBack($post)
{
  $Record = GetDBRecord();
  echo '<textarea id="bizdesc" rows="2" cols="50">';
  echo $Record['BizDescp'];
  echo  '</textarea>';

  echo '<input type=text id="YourName" name="YourName"  value="' .$Record['Name'] .'"/>'
}

should be

 function DrawCallBack( $post )
 {
  $Record = GetDBRecord();
  echo '<textarea name="bizdesc" id="bizdesc" rows="2" cols="50">';
  echo esc_textarea( $Record['BizDescp'] );
  echo  '</textarea>';

  echo '<input type="text" id="YourName" name="YourName"  value="' .esc_attr( $Record['Name'] ) .'"/>';
}

I hope this helps.

  • 1
    Don't forget to use esc_textarea else someone can put </textarea> in the textarea to insert arbitrary HTML. Same with the value and esc_attr, the missing escaping allows various security breaches – Tom J Nowell Mar 9 at 2:20

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.