Due tassonomie personalizzate nella struttura del permalink

Sto facendo fatica a creare una struttura di permalink personalizzata con tassonomie personalizzate. Ho letto molte domande / risposte qui ma non riesco a farlo funzionare (la cosa più frustrante è che non conosco un modo per eseguire il debug e trovare il problema da solo). Qualsiasi aiuto è molto apprezzato!

Cosa hai bisogno di sapere

  • Ho un tipo di messaggio personalizzato chiamato items
  • items hanno due tassonomie personalizzate:
    • types e locations .
  • Ogni articolo è associato a un type e a più posizioni (1+)

Sto cercando di ottenere questa struttura di collegamento per ogni item :

http://domain.com/type/location

mentre io voglio solo il primo termine di posizione da utilizzare in questa struttura di collegamento.

Non ho provato a implementare la parte /location della struttura del link (credo sia un po ‘più complesso), dato che sto già lottando con /type/ part. Quindi il mio codice sembra attualmente questo e questo non produce alcun cambiamento nei miei permalink:

in un plugin

 register_post_type( 'item', array( 'labels' => $labels, 'supports' => array( 'title', 'editor', 'thumbnail', 'comments'), 'public' => true, 'has_archive' => true, 'rewrite' => true, 'menu_icon' => plugins_url( '/img/icon.png'), 'menu_position' => 42, 'categories' => array( ), ) ); register_taxonomy( 'types', 'item', array( 'labels' => $item_types_labels, 'hierarchical' => true, 'query_var' => 'type', 'rewrite' => true, 'public' => true, 'show_ui' => true, ) ); 

in functions.php

 add_filter('post_link', 'types_permalink', 10, 3); add_filter('post_type_link', 'types_permalink', 10, 3); function types_permalink($permalink, $post_id, $leavename) { if (strpos($permalink, '%types%') === FALSE) return $permalink; // Get post $post = get_post($post_id); if (!$post) return $permalink; // Get taxonomy terms $terms = wp_get_object_terms($post->ID, 'types'); if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) $taxonomy_slug = $terms[0]->slug; else $taxonomy_slug = 'no-type'; return str_replace('%types%', $taxonomy_slug, $permalink); } 

Ho impostato la struttura del mio permalink sulla struttura personalizzata /%types%/%postname%/ . Il mio URL sembra ancora questo domain.com/item/postname .

Inoltre: qualunque cosa io metta in atto per /item/ (ad esempio domain.com/this-doesn-make-sense-to-me/postname ), ricevo il reindirizzamento su domain.com/item/postname .

Solutions Collecting From Web of "Due tassonomie personalizzate nella struttura del permalink"

Primo problema: la struttura permalink in Impostazioni è solo per il tipo post post, quindi la tua funzione post_type_link non ha tag %types% da sostituire.

Secondo, a meno che tu non voglia una soluzione molto complicata (e meno performante), la soluzione più semplice è avere un prefisso statico nel tuo slug del tipo di post. Con l’URL http://domain.com/type/location/post-name/ , WordPress non ha modo di sapere cosa stai chiedendo. type una pagina con location pagina location o è un termine di tassonomia dei types ? Utilizzando il sistema di riscrittura standard, una regola avrà sempre la precedenza e le altre richieste saranno sempre 404. Con il formato URL http://domain.com/item/type/location/post-name/ , WordPress saprà esattamente cosa stai chiedendo, perché solo un tipo di post è preceduto da un item .

Per quanto riguarda le specifiche, nella registrazione del tipo di post, impostare l’argomento slug di rewrite nel formato dell’URL desiderato:

 'rewrite' => array( 'slug' => 'item/%types%' ), 

… e il tuo filtro post_type_link dovrebbe funzionare. Se vuoi aggiungere luoghi, aggiungi quel tag allo slug e aggiungi il codice per sostituire il tag nel tuo post_type_link

 'rewrite' => array( 'slug' => 'item/%types%/%locations%' ),