Liste todas as categorias, mas exclua a categoria de publicação atual na página de publicação única

Eu quero exibir uma lista de categorias, excluindo a categoria da única publicação atual em que o usuário está navegando. A lista é exibida no modelo single.php .

Estou usando este código para exibir todas as categorias e está funcionando bem, mas não consigo encontrar uma maneira de excluir a categoria de publicação atual:

  

Alguma idéia sobre como alcançá-lo?

Solutions Collecting From Web of "Liste todas as categorias, mas exclua a categoria de publicação atual na página de publicação única"

A idéia aqui seria usar a ID do object consultado para obter os termos de publicação ( porque provavelmente estamos fora do loop aqui, se dentro do loop, use apenas get_the_ID() ). A partir daí, podemos usar wp_list_pluck() para obter todas as ID do termo e simplesmente passar para o parâmetro get_terms() exclude

Apenas uma nota, a partir do WordPress V4.5, a taxonomia deve ser aprovada como argumento de $args , eu lidar com ambos os casos

PRE 4.5

 // Set all our variables $taxonomy = 'category'; $post_id = $GLOBALS['wp_the_query']->get_queried_object_id(); $args = [ 'hide_empty' => false ]; // Get the ID's from the post terms $post_terms = get_the_terms( $post_id, $taxonomy ); if ( $post_terms && !is_wp_error( $post_terms ) ) { $term_ids = wp_list_pluck( $post_terms, 'term_id' ); // Get all the terms with the post terms excluded $args['exclude'] = $term_ids; } $terms = get_terms( $taxonomy, $args ); 

Versão V 4.5 +

 // Set all our variables $taxonomy = 'category'; $post_id = $GLOBALS['wp_the_query']->get_queried_object_id(); $args = [ 'taxonomy' => $taxonomy, 'hide_empty' => false ]; // Get the ID's from the post terms $post_terms = get_the_terms( $post_id, $taxonomy ); if ( $post_terms && !is_wp_error( $post_terms ) ) { $term_ids = wp_list_pluck( $post_terms, 'term_id' ); // Get all the terms with the post terms excluded $args['exclude'] = $term_ids; } $terms = get_terms( $args ); 

Primeiro, você precisará de uma matriz que contenha todas as categorias da postagem atual:

 $current_cats = wp_get_post_categories(); // assuming you are in the loop 

Então você deve percorrer $ current_cats e remover os itens de $ termos

  foreach( $current_cats as $cat ) { if (($key = array_search($cat, $terms)) !== false) { unset($terms[$key]); } } 

Espero que isso funcione.