Saving two categories from two dropdowns in front end posting form

So, here’s the deal:

I have two category dropdowns, the first for the parent categories and the second for the child categories. They form a chain so that when you select the parent category the second dropdown will be populated with its child categories. Here’s the code in the form itself:

Read More
    <script type="text/javascript">
    $(function()
    {
    $('#main_cat').change(function()
    {
        var $mainCat=$('#main_cat').val();

        // call ajax
        $("#sub_cat").empty();
        $.ajax
        (
            {
                url:"<?php bloginfo('wpurl'); ?>/wp-admin/admin-ajax.php",     
                type:'POST',
                data:'action=my_special_ajax_call&main_catid=' + $mainCat,

                success:function(results)
                {
                    //  alert(results);
                    $("#sub_cat").removeAttr("disabled");       
                    $("#sub_cat").append(results);  
                }
            }
        );                                    
    });
    });
    </script>
    <fieldset class="site-url" class="fieldset-first">
    <?php wp_dropdown_categories('show_count=0&selected=-1&hierarchical=1&depth=1&hide_empty=0&exclude=1&show_option_none=Main Categories&name=main_cat&taxonomy=category');
    ?>
</fieldset>
<fieldset class="site-url" class="fieldset-first">
<select name="sub_cat" id="sub_cat" disabled="disabled"></select>
</fieldset>

Here’s the code in functions.php:

function implement_ajax() {
if(isset($_POST['main_catid']))
    {
    $categories=  get_categories('child_of='.$_POST['main_catid'].'&hide_empty=0'.'&taxonomy=category'.'&show_count=0');
      foreach ($categories as $cat) {
        $option .= '<option value="'.$cat->term_id.'">';
        $option .= $cat->cat_name;
        $option .= ' ('.$cat->category_count.')';
        $option .= '</option>';
      }
      echo '<option value="-1" selected="selected">Sub Categories</option>'.$option;
    die();
    } // end if
}
add_action('wp_ajax_my_special_ajax_call', 'implement_ajax');
add_action('wp_ajax_nopriv_my_special_ajax_call', 'implement_ajax');

The problem is that when saving the values like this:

'post_category' =>   array($_POST['main_cat']),

I’ll only get the parent category saved for the post. How on earth can I have the parent AND the child categories both saved? Bear in mind that only one category should be selected from each dropdown, no multiples.

Cheers!

UPDATED WITH WHOLE POST POSTING/SAVING CODE BELOW:

<?php       
if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) &&  $_POST['action'] == "new_post") {

    // Do some minor form validation to make sure there is content

    require_once('recaptchalib.php');
        $privatekey="Oh dear I shouldn't have put my super private API key here for all to see!";

        $resp = recaptcha_check_answer ($privatekey,
                                        $_SERVER["REMOTE_ADDR"],
                                        $_POST["my_recapthca_challange_field"],
                                        $_POST["recaptcha_response_field"]);

if ($resp->is_valid) {

    if (isset ($_POST['title'])) {
        $title =  $_POST['title'];
        $_SESSION['form_values']['title'] = $_POST['title'];
    } 

    if (isset ($_POST['site-link'])) {
        $siteurl =  $_POST['site-link'];
        $_SESSION['form_values']['site-link'] = $_POST['site-link'];
    }

if (isset ($_POST['first-url'])) {
        $firsturl =  $_POST['first-url'];
        $_SESSION['form_values']['first-url'] = $_POST['first-url'];
    }

if (isset ($_POST['price'])) {
        $price =  $_POST['price'];
        $_SESSION['form_values']['price'] = $_POST['price'];
    }

    if (isset ($_POST['name'])) {
        $devname =  $_POST['name'];
        $_SESSION['form_values']['name'] = $_POST['name'];   
    } 

    if (isset ($_POST['second-url'])) {
        $secondurl =  $_POST['second-url'];
         $_SESSION['form_values']['second-url'] = $_POST['second-url'];
    } 

    if (isset ($_POST['country'])) {
        $devcountry =  $_POST['country'];
         $_SESSION['form_values']['country'] = $_POST['country'];
    }

    if ($_POST['twitter']=="Twitter Username" || $_POST['twitter']=="Not Available")  {
        $twitter =  "Not Available";
         $_SESSION['form_values']['twitter'] = $twitter;
    }else  {
        $twitter = $_POST['twitter'];
        $_SESSION['form_values']['twitter'] = $_POST['twitter'];
    }

    $design =  $_POST['design'];
       if ($design=="yes"){$design = "Yes, this is new!";}
        else {$design="No, this is old!";}


        $related =  $_POST['related'];
       if ($related=="yes"){$related = "Yes, this is related!";}
        else {$related="No, this is not related!";}

$responds =  $_POST['responds'];
       if ($responds=="yes"){$responds = "Yes";}
        else {$responds="No";}

$locale =  $_POST['locale'];
       if ($locale=="yes"){$locale = "Yes";}
        else {$locale="No";}

$widgets =  $_POST['widgets'];
       if ($widgets=="yes"){$widgets = "Yes";}
        else {$widgets="No";}

$skins =  $_POST['skins'];
       if ($skins=="yes"){$skins = "Yes";}
        else {$skins="No";}

$contact =  $_POST['contact'];
       if ($contact=="yes"){$contact = "Yes";}
        else {$contact="No";}

$press =  $_POST['press'];
       if ($press=="yes"){$press = "Yes";}
        else {$press="No";}

$comm =  $_POST['comm'];
       if ($comm=="yes"){$comm = "Yes";}
        else {$comm="No";}

$page =  $_POST['page'];
       if ($page=="yes"){$page = "Yes";}
        else {$page="No";}

$psd =  $_POST['psd'];
       if ($psd=="yes"){$psd = "Yes";}
        else {$psd="No";}

$format =  $_POST['format'];
       if ($format=="yes"){$format = "Yes";}
        else {$format="No";}

$codes =  $_POST['codes'];
       if ($codes=="yes"){$codes = "Yes";}
        else {$codes="No";}


     if ($_FILES['image']['error']==0) { 

    // ADD THE FORM INPUT TO $new_post ARRAY
    $new_post = array(
    'post_title'    =>   $title,
'post_category' =>   array($_POST['main_cat']),
    'post_status'   =>   'draft',
    'post_type' =>   'post'
    );

    $pid = wp_insert_post($new_post);
    add_post_meta($pid, 'URL', $siteurl, true);
    add_post_meta($pid, 'Name', $name, true);
    add_post_meta($pid, 'First URL', $firsturl, true);
    add_post_meta($pid, 'Country', $country, true);
    add_post_meta($pid, 'Twitter', $twitter, true);
    add_post_meta($pid, 'Redesign', $redesign, true);
    add_post_meta($pid, 'Related', $related, true);
add_post_meta($pid, 'Responds', $responds, true);
add_post_meta($pid, 'Locale', $locale, true);
add_post_meta($pid, 'Widgets', $widgets, true);
add_post_meta($pid, 'Skins', $skins, true);
add_post_meta($pid, 'Contact', $contact, true);
add_post_meta($pid, 'Press', $press, true);
add_post_meta($pid, 'Comm', $comm, true);
add_post_meta($pid, 'Page', $page, true);
add_post_meta($pid, 'PSD', $psd, true);
add_post_meta($pid, 'Format', $format, true);
add_post_meta($pid, 'Second URL', $secondurl, true);
add_post_meta($pid, 'Price', $price, true);
add_post_meta($pid, 'Codes', $codes, true);

wp_set_post_categories($post_id, $_POST['main_cat']);
    wp_set_post_tags($post_id, $_POST['post_tags']);


    foreach ($_FILES as $file => $array) {
    $newupload = insert_attachment($file,$pid);

    }
    $imagedata = simplexml_load_string(get_the_post_thumbnail($pid));
    $post_img = $imagedata->attributes()->src;

    include_once("script/colors.inc.php");
    $image = $post_img;
    $ex=new GetMostCommonColors();
    $ex->image = $image;
    $colors=$ex->Get_Color();
    $how_many=10;
    $colors_key=array_keys($colors);
    $colortag = $colors_key[1];
    for ($i = 2; $i <= $how_many; $i++)
    {
    $colortag = $colortag.",".$colors_key[$i];
    }

    wp_set_post_tags($pid, $colortag);
     $_SESSION['error_message'] = 'Submitted successfully.';
     $_SESSION['form_values'] = array();
     do_action('wp_insert_post', 'wp_insert_post');

    }

} else {
    if (isset ($_POST['title'])) {
        $name =  $_POST['title'];
        $_SESSION['form_values']['title'] = $_POST['title'];
    } 

    if (isset ($_POST['site-link'])) {
        $siteurl =  $_POST['site-link'];
        $_SESSION['form_values']['site-link'] = $_POST['site-link'];
    }

if (isset ($_POST['first-url'])) {
        $firsturl =  $_POST['first-url'];
        $_SESSION['form_values']['first-url'] = $_POST['first-url'];
    }

if (isset ($_POST['price'])) {
        $price =  $_POST['price'];
        $_SESSION['form_values']['price'] = $_POST['price'];
    }

    if (isset ($_POST['name'])) {
        $name =  $_POST['name'];
        $_SESSION['form_values']['name'] = $_POST['name'];

    }

    if (isset ($_POST['second-url'])) {
        $secondurl =  $_POST['dev-url'];
         $_SESSION['form_values']['second-url'] = $_POST['second-url'];
    }

    if (isset ($_POST['country'])) {
        $country =  $_POST['country'];
         $_SESSION['form_values']['country'] = $_POST['country'];
    }

    if ($_POST['twitter']=="Twitter Username" || $_POST['twitter']=="Not Available")  {
        $twitter =  "Not Available";
         $_SESSION['form_values']['twitter'] = $twitter;
    }else  {
        $twitter = $_POST['twitter'];
        $_SESSION['form_values']['twitter'] = $_POST['twitter'];
    }

    $redesign =  $_POST['redesign'];
       if ($redesign=="yes"){$redesign = "Yes, this is new!";}
        else {$redesign="No, this is old!";}


        $related =  $_POST['related'];
       if ($related=="yes"){$related = "Yes, this is related!";}
        else {$related="No, this is not related!";}

$responds =  $_POST['responds'];
       if ($responds=="yes"){$responds = "Yes";}
        else {$responds="No";}

$locale =  $_POST['locale'];
       if ($locale=="yes"){$locale = "Yes";}
        else {$locale="No";}

$widgets =  $_POST['widgets'];
       if ($widgets=="yes"){$widgets = "Yes";}
        else {$widgets="No";}

$skins =  $_POST['skins'];
       if ($skins=="yes"){$skins = "Yes";}
        else {$skins="No";}

$contact =  $_POST['contact'];
       if ($contact=="yes"){$contact = "Yes";}
        else {$contact="No";}

$press =  $_POST['press'];
       if ($press=="yes"){$press = "Yes";}
        else {$press="No";}

$comm =  $_POST['comm'];
       if ($comm=="yes"){$comm = "Yes";}
        else {$comm="No";}

$page =  $_POST['page'];
       if ($page=="yes"){$page = "Yes";}
        else {$page="No";}

$psd =  $_POST['psd'];
       if ($psd=="yes"){$psd = "Yes";}
        else {$psd="No";}

$format =  $_POST['format'];
       if ($format=="yes"){$format = "Yes";}
        else {$format="No";}

$codes =  $_POST['codes'];
       if ($codes=="yes"){$codes = "Yes";}
        else {$codes="No";}
     $_SESSION['error_message'] = 'You will need to enter the correct captcha value. Please try again!';
        }

}

?>

Related posts

Leave a Reply

1 comment

  1. To fix this you will need to pass in multiple terms rather than a single term

    so instead of:

    $_POST['main_cat']
    

    Use:

    array($_POST['main_cat'],$_POST['sub_cat'])
    

    You shouldn’t need to save main_cat though. Assigning sub_cat should imply it’s also in subcat’s parent term