Question

this code works fine. the problem i have is that when i submit it only checks the parent category not the subcategory even though i specified both a parent and a subcategory.

please. what am i doing wrong. ohh if you look in the html chunk, the 7 is parent cat and the numbers after the comma are the subcategories.

   <?php 
if(isset($_POST['new_post']) == '1') {
    $post_title = $_POST['post_title'];
    $post_category = $_POST['cat'];
    $post_content = $_POST['post_content'];
    $new_post = array(
          'ID' => '',
          'post_author' => $user->ID, 
          'post_content' => $post_content,
          'post_title' => $post_title,
          'post_status' => 'publish',
          'post_category' => array($post_category)

        );

    $post_id = wp_insert_post($new_post);

    // This will redirect you to the newly created post
    $post = get_post($post_id);
    wp_redirect($post->guid);
}      
?>

this is the html

<form method="post" action="" name="" onsubmit="return checkformf(this);">


<input type="text" name="post_title" size="45" id="input-title"/>

<textarea rows="5" name="post_content" cols="66" id="text-desc"></textarea></br>


<ul><select name='cat' id='cat' class='postform' > 
    <option class="level-0" value="7,95">child cat1</option> 
    <option class="level-0" value="7,100">child cat2</option> 
    <option class="level-0" value="7,101">child cat3</option> 
    <option class="level-0" value="7,94">child cat4</option> 
</select> 
</ul>

<input type="hidden" name="new_post" value="1"/> 

<input class="subput" type="submit" name="submitpost" value="Post"/> 


</form>

please let me know if you need more information. thanks in advance

Was it helpful?

Solution

The problem is, you can't make an array like that in PHP. Trying to cast a string that contains a comma separated list as an array just produces an array with a single value--your comma separated string.

You want to use php's explode function to create the array. It takes a string an splits it into a bona fide array based on an arbitrary delimiter (in your case, we'll use a comma).

Try something like this:

if(isset($_POST['new_post']) == '1') {
    $post_title = $_POST['post_title'];
    $arr_post_category = explode(',',$_POST['cat']); // EXPLODE!
    $post_content = $_POST['post_content'];
    $new_post = array(
          'ID' => '',
          'post_author' => $user->ID, 
          'post_content' => $post_content,
          'post_title' => $post_title,
          'post_status' => 'publish',
          'post_category' => $arr_post_category // NOW IT'S ALREADY AN ARRAY

        );

    $post_id = wp_insert_post($new_post);

    // This will redirect you to the newly created post
    $post = get_post($post_id);
    wp_redirect($post->guid);
}
Licensed under: CC-BY-SA with attribution
Not affiliated with wordpress.stackexchange
scroll top