Come disabilitare completamente una tassonomia nella parte frontale del sito?

5 apr 2014, 16:12:15
Visualizzazioni: 21.4K
Voti: 8

Ho registrato tre tassonomie personalizzate. Tutte e tre queste tassonomie personalizzate sono collegate al mio custom post type.

C'è solo una tassonomia delle tre registrate che vorrei non fosse assolutamente accessibile nella parte frontale del sito web.

Qual è la soluzione migliore per questo?

Ho provato a specificare diversi argomenti durante la registrazione della tassonomia, ma niente sembra funzionare.

$args['show_in_nav_menus'] = false;
$args['query_var'] = false;
$args['public'] = false;

Dovrei semplicemente agganciarmi a template_redirect e fare un controllo con is_tax()? Se è la tassonomia che voglio disabilitare, reindirizzare semplicemente all'archivio del custom post type?

4
Commenti

Quali argomenti? Spiega "non sembra funzionare niente"? Che effetto stai cercando di ottenere e cosa vedi invece?

s_ha_dum s_ha_dum
5 apr 2014 16:14:55

Utilizzando quelle impostazioni non sarai in grado di interrogare la tassonomia usando gli URL... ma nulla impedisce di interrogare la tassonomia usando una query personalizzata (new WP_Query(...))

gmazzap gmazzap
5 apr 2014 16:26:21

Semplicemente non voglio che gli URL funzionino per quella tassonomia... punto.

Michael Ecklund Michael Ecklund
5 apr 2014 16:27:45

@MichaelEcklund Quindi, quello che hai fatto finora è sufficiente.

gmazzap gmazzap
5 apr 2014 16:58:16
Tutte le risposte alla domanda 4
4
18

La risposta di s_ha_dum non ha funzionato per me, ma questo sì:

/**
 * Disabilita completamente gli archivi dei termini per questa tassonomia.
 * @param  string $taxonomy Nome della tassonomia WordPress
 */
function kill_taxonomy_archive($taxonomy){

    add_action('pre_get_posts', function($qry) use ($taxonomy) {

            if (is_admin()) return;

            if (is_tax($taxonomy)){
                $qry->set_404();
            }

        }

    );

}
30 nov 2015 00:36:39
Commenti

Mi piace il set_404();. Bella idea.

Michael Ecklund Michael Ecklund
20 gen 2016 22:50:14

+1 — Questo è più nello "stile Wordpress" rispetto alla risposta accettata. Idealmente, dovrebbe esserci un argomento "has_archive", come per i post type...

Sebastien Sebastien
21 ott 2016 10:30:08

Questo genera un avviso Undefined variable: taxonomy in ... [location] C'è un modo per evitarlo?

Armstrongest Armstrongest
6 set 2017 21:07:45

Hai passato un nome di tassonomia quando hai chiamato kill_taxonomy_archive?

Chris Herbert Chris Herbert
7 set 2017 00:19:34
3

La tassonomia di WordPress offre flessibilità nell'impostare le sue proprietà durante la registrazione. Per disabilitare gli archivi delle tassonomie in WordPress, imposta "public" come "false" come mostrato nel codice di esempio qui sotto. Ciò rimuoverà il link azione "Visualizza" dalla schermata della tassonomia e reindirizzerà l'utente alla homepage del sito quando tenterà di accedere manualmente all'URL della tassonomia.

Descrizione immagine esempio tassonomia WordPress

Esempio

// Registra una Tassonomia Personalizzata
function custom_taxonomy() {
  $labels = array(
    'name' => _x( 'Tassonomie', 'Nome Generico Tassonomia', 'text_domain' ),
    'singular_name' => _x( 'Tassonomia', 'Nome Singolare Tassonomia', 'text_domain' ),
    'menu_name' => __( 'Tassonomia', 'text_domain' ),
    'all_items' => __( 'Tutti gli Elementi', 'text_domain' ),
    'parent_item' => __( 'Elemento Genitore', 'text_domain' ),
    'parent_item_colon' => __( 'Elemento Genitore:', 'text_domain' ),
    'new_item_name' => __( 'Nome Nuovo Elemento', 'text_domain' ),
    'add_new_item' => __( 'Aggiungi Nuovo Elemento', 'text_domain' ),
    'edit_item' => __( 'Modifica Elemento', 'text_domain' ),
    'update_item' => __( 'Aggiorna Elemento', 'text_domain' ),
    'view_item' => __( 'Visualizza Elemento', 'text_domain' ),
    'separate_items_with_commas' => __( 'Separa gli elementi con virgole', 'text_domain' ),
    'add_or_remove_items' => __( 'Aggiungi o rimuovi elementi', 'text_domain' ),
    'choose_from_most_used' => __( 'Scegli tra i più utilizzati', 'text_domain' ),
    'popular_items' => __( 'Elementi Popolari', 'text_domain' ),
    'search_items' => __( 'Cerca Elementi', 'text_domain' ),
    'not_found' => __( 'Non Trovato', 'text_domain' ),
    'no_terms' => __( 'Nessun elemento', 'text_domain' ),
    'items_list' => __( 'Lista Elementi', 'text_domain' ),
    'items_list_navigation' => __( 'Navigazione Lista Elementi', 'text_domain' ),
  );

  $args = array(
    'labels' => $labels,
    'hierarchical' => false,
    'public' => false, // Impostalo a false per rimuovere il link Visualizza dal backend e reindirizzare alla homepage
    'show_ui' => true,
    'show_admin_column' => true,
    'show_in_nav_menus' => true,
    'show_tagcloud' => true,
  );
1 set 2020 14:37:39
Commenti

Questa è l'unica risposta corretta. Per chi volesse filtrare le tassonomie esistenti, può utilizzare il filtro register_taxonomy_args.

User User
2 mag 2021 15:18:54

Invece di public = false, aggiungi un'altra variabile nell'array publicly_queryable = false che non mostrerà l'opzione di visualizzazione, public= false rimuoverà l'intera opzione dal menu nel pannello di amministrazione.

Ankit Prajapati Ankit Prajapati
3 nov 2022 11:56:46

Questo funziona MA se qualcuno sta usando Gutenberg creerà problemi come il blocco core wp:core/post-terms che non sarà in grado di recuperare la tassonomia (ad esempio Display) :|

Isu Isu
2 ott 2024 20:52:05
0

Non sono sicuro del perché @chris-herbert lo abbia scritto in questo modo, ma se aggiungi questo al tuo file functions.php, forzerà qualsiasi navigazione verso quell'archivio a reindirizzare alla tua pagina 404.

add_action('pre_get_posts', 'kill_taxonomy_archive');
function kill_taxonomy_archive($qry) {

    if (is_admin()) return;

    if (is_tax('tax-slug')){
        $qry->set_404();
    }
}
3 giu 2020 01:28:46
2
-2

Per garantire che la tua tassonomia non venga mai interrogata nel front end, puoi rimuoverla da tutte le query front end.

add_action(
  'pre_get_posts',
  function($qry) {

    if (is_admin()) return;

    $kill = 'genre'; // elimina questa tassonomia

    $tax_query = $qry->get('tax_query');
    if (empty($tax_query)) return;

    $relation = false;
    if (isset($tax_query['relation'])) {
      $relation = $tax_query['relation'];
      unset($tax_query['relation']);
    }

    foreach ($tax_query as $k => &$tax) {
      if (isset($tax['taxonomy']) && 'genre' === $tax['taxonomy']) {
        unset($tax_query[$k]);
      }
    }

    if (1 < count($tax_query)) {
      $tax_query['relation'] = $relation;
    }

    $qry->set('tax_query',$tax_query);

  }
);

L'uso di una closure dovrebbe rendere difficile la rimozione del callback.

Potresti anche voler implementare il reindirizzamento come ipotizzato, ma farlo non impedirebbe alle query secondarie nei template di pagina o nei widget di recuperare la tassonomia, o potrebbe causare problemi se tenti di reindirizzare tardi nel caricamento della pagina.

5 apr 2014 17:20:05
Commenti

Ho votato negativamente per scoraggiare l'uso di questa tecnica approssimativa. Vedi la risposta di @chris-herbert qui sotto, che è più in linea con il pensiero di WP (anche se non è ancora l'ideale, ma è colpa di WP).

Sebastien Sebastien
21 ott 2016 10:32:50

Concordo con Sebastien - l'approccio con il 404 è molto meglio e funziona bene.

Dan Smart Dan Smart
19 gen 2017 17:14:01