I’m guessing that in get_option( 'sticky_posts' )
is array of posts that are sticked? I suggest changing this method to post meta values.
You could mark news as sticky by adding post meta to news, for example
add_post_meta($post_id, 'sticky_post', 1);
and then you should order posts by this meta:
$args = array(
'post_type' => 'news',
'meta_query' => array(
'relation' => 'OR',
array( // get posts with sticky_key value = 1
'key' => 'sticky_post',
'value' => '1',
),
array( // get posts with sticky_key value != 1, so this is rest of posts
'key' => 'sticky_post',
'value' => '1',
'compare' => '!='
)
),
'orderby' => array(
'meta_value_num' => 'DESC', // first order by sticky_post value, so you could create levels of "stickness"
'post_date' => 'DESC' // then normal sort
)
);
$query = new WP_Query($args);