J'ai ajouté mes taxonomies dans le permalien au lieu du slug du type de message personnalisé, et cela fonctionne bien. Je dirais même que tout fonctionnait bien, mais changer l'installation de WP en Multisite cassait tous les autres posts et pages (pas les CPT).
Les permaliens sont générés correctement chaque fois que? P = 123 ou d’autres URL supposées, l’information de publication est donc trouvée, mais non trouvée pour la boucle.
Voici comment j'ai obtenu la taxonomie à la place du slug du CPT:
1) La réécriture post_type est définie comme% listing_type% et fonctionne correctement, comme suit:
'rewrite' => array(
'slug' => '/%listing_type%',
'with_front' => false,
2) Et les fonctions suivantes remplacent les chaînes% listing_type% et "listing_type" des liens URL et terme, générées par exemple. wp_list_categories (), respectivement (en supprimant le nom du CPT de l'URL)
function listing_type_link_filter_function( $post_link, $id = 0, $leavename = FALSE ) {
if ( strpos('%listing_type%', $post_link) === 'FALSE' ) {
return $post_link;
}
$post = get_post($id);
if ( !is_object($post) || $post->post_type != 'listing' ) {
return $post_link;
}
$terms = wp_get_object_terms($post->ID, 'listing_type');
if ( !$terms ) {
return str_replace('/listing_type', '/', $post_link);
}
return str_replace('%listing_type%', $terms[0]->slug, $post_link);
}
add_filter('post_type_link', 'listing_type_link_filter_function', 1, 3);
function term_link_filter_function( $termlink, $term, $taxonomy ) {
if ( strpos('listing_type', $termlink) === 'FALSE' ) {
return $termlink;
} else return str_replace('/listing_type', '', $termlink);
}
add_filter('term_link', 'term_link_filter_function', 1, 3);
Maintenant, je suis presque sûr que tout fonctionnait bien avant d'en faire un multisite. Je rechercherai comment le supprimer en toute sécurité (le multisite) et publierai la mise à jour plus tard.
Avez-vous une idée de ce qui pourrait casser les posts et les pages PAS dans les CPT ci-dessus? Si je supprime le% s du slug post_type, tout se passe bien.
UPDATAE
J'ai remarqué que d'autres exemples de travail avaient une règle de réécriture pour chaque permalien personnalisé, je l'ai donc ajoutée, et VOILA, les publications sont corrigées maintenant, mais les pages sont toujours cassées.
CELA FONCTIONNE PARTIELLEMENT (messages uniquement)
global $wp_rewrite;
$wp_rewrite->extra_permastructs['listing'][0] = "%listing_type%/%postname%";
add_rewrite_rule("([^/]+)/([^/]+)/?$", 'index.php?post_type=listing&listing_type=$matches[1]&name=$matches[2]', 'bottom');
add_rewrite_rule("([^/]+)/([^/]+)/?$", 'index.php?post_type=listing&listing_type=$matches[1]&page=$matches[2]', 'bottom');
Le code ci-dessus (à l'intérieur de la fonction de définition CPT) ne corrigeait que les publications , mais les pages (pour lesquelles la deuxième ligne add_rewrite_rule était) étaient toujours brisées.
Ajoutez vos règles de réécriture à top
, pas bottom
. Chaque règle qui correspond va interrompre le processus. Donc, s'il y a seulement un match simple avant, vos règles seront ignorées.