Assign parent category to all posts that are already assigned to child category

be careful and only run it once

$_query = new WP_Query( array(
    'post_type' => 'post',
    'posts_per_page' => -1,
 ) );
function complete_parent_category( $term_id, $dep=array() ) {
    $category = get_term( $term_id, 'category' );
    $dep[ $category->term_id ] = $category->slug;
    if( $category->parent ) {
      $dep = complete_parent_category( $category->parent, $dep );
    }
    return $dep;
}
echo '<pre>';
while( $_query->have_posts() ) {
  $_query->next_post();
  echo '<br /><strong>'.$_query->post->post_title .'</strong> |>> ';
  $cat_post = array();
  $cats = get_the_category( $_query->post->ID );
  if( count( $cats ) ) {
    foreach ($cats as $cat) {
      $cat_post[ $cat->term_id ] = $cat->slug;
      if( $cat->parent == 0 ) continue; 
      $category_object = get_term( $cat, 'category' );
      $cat_post = complete_parent_category( $cat->parent, $cat_post );
    }
  }
  if( count( $cats ) == count( $cat_post ) ) return;
  $data = array(
      'ID'           => $_query->post->ID,
      'post_category' => array_keys($cat_post),
  );
  wp_update_post( $data );
}

wp_reset_postdata();

exit();

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)