WordPress как на ладони
WordPress темы и плагины за 250 рублей wordpress jino

Фильтр (exlude) таксономии из массива по главному родителю

использую get_the_category($post->ID, 'category') и получаю ( лишние строки убрал )
убить категорию (категории) по id не проблема, а как убить по высшему родителю?

Array
(
	[0] => WP_Term Object
		(
			[term_id] => 77 
			[term_taxonomy_id] => 77
			[taxonomy] => category
			[parent] => 78
			[cat_ID] => 77
			[category_parent] => 78
		)

	[1] => WP_Term Object
		(
			[term_id] => 96
			[term_taxonomy_id] => 96
			[taxonomy] => category
			[parent] => 42
			[cat_ID] => 96
			[category_parent] => 42
		)

)

Ломаю голову: как отсечь из вывода все категории что принадлежат [category_parent] => 78
можно ли как-то сделать на подобие ?

get_the_category($post->ID , array( 
				'taxonomy' =>'category',
				'Excludes' => {[category_parent] => 78'}
));

хочу просто убивать с массива таксономии (и инфу) которые являются дочерними к [category_parent] => 78 - все остальное должно идти как обычно
должно просто остаться

Array
(   

	[0] => WP_Term Object
		(
			[term_id] => 96
			[term_taxonomy_id] => 96
			[taxonomy] => category
			[parent] => 42
			[cat_ID] => 96
			[category_parent] => 42
		)

)

сейчас юзаю

///////Example usage//////////
//get object terms for $post->ID with taxonomies categories and tags, 
//args set as fields all and exclude term with id 1

///////Filter function//////////
function wp_get_object_terms_exclude_filter($terms, $object_ids, $taxonomies, $args) {
	//if exclude is set and fields is set to all go
	if(isset($args['exclude']) && $args['fields'] == 'all') {
		//loop through terms
		foreach($terms as $key => $term) {
			//loop through exclude terms
			foreach($args['exclude'] as $exclude_term) {
				//if exlude term matches current object term unset
				if($term->term_id == $exclude_term) {
					unset($terms[$key]);
				}
			}
		}
	}
	//reset keys, because of unset.
	$terms = array_values($terms); 
	return $terms;
}
add_filter('wp_get_object_terms', 'wp_get_object_terms_exclude_filter', 10, 4);

в сингле 

$term = wp_get_object_terms(
				$post->ID, 
				array(
					'category', 
					'post_tag'
				), 
				array(
					'fields' => 'all', 
					'exclude' => array(78,77)
				)
			);
0
kolshix
321
6 месяцев назад

Нет ответов на этот вопрос.

    На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация