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?

4
  • 3
    Your textarea doesn't have a name.
    – Sally CJ
    Commented Mar 9, 2019 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
    Commented Mar 9, 2019 at 2:21
  • Tom, no code is missing. The code that pulls the values is the _POST. Commented Mar 9, 2019 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. Commented Mar 9, 2019 at 18:18

2 Answers 2

5

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
  • 2
    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
    Commented Mar 9, 2019 at 2:20
0

Problem solved. It was a field naming problem.

2
  • 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. Commented Mar 10, 2019 at 19:28
  • truly that was the answer. I wrote the question, the name of the field was wrong. Commented Mar 11, 2019 at 0:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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