I would use “get_the_terms” to get the terms related to the post instead of “get_terms”, here is a quick suggestion (not tested)
$args=array(
'post_type'=>'tour_package',
'post__not_in' => array(get_the_ID()),
'posts_per_page'=> 5,
'caller_get_posts'=>1,//handle sticky post but not in first
);
$categories = get_the_terms( get_the_ID(),'tour_category' );
if ($categories)
{
$category_ids = array();
foreach($categories as $individual_category){
$category_ids[] = $individual_category->term_id;
}
if(!empty($category_ids))
{
$args['tax_query']= array(
array(
'taxonomy' => 'tour_category',
'field' => 'term_id',
'terms' => $category_ids,
),
);
}
}
$query = new WP_Query( $args );