web-dev-qa-db-fra.com

De jolies URL pour une liste de types d'articles personnalisée avec une taxonomie personnalisée partagée?

( Note du modérateur: Title était "Convertissez en URL Nice une URL de taxonomie personnalisée partagée avec une valeur de chaîne de requête")

J'ai un modèle de taxonomie personnalisé: taxonomy-country.php utilisé par deux (2) types de publication personnalisés: 'event' et 'contact'. J'aimerais configurer les pages à afficher, par exemple:

  • "Tous les contacts du Costa Rica" , et

  • "Tous les événements aux États-Unis"

Ces URL actuelles me donnent ces listes:

Mais j'aimerais implémenter ces URL en tant qu'URL agréables, comme ceci:

Ou même mieux, quelque chose comme:

Pour la première préférence, vous aurez besoin de filtrer dans des règles de réécriture supplémentaires comme so;

function __extra_country_rewrite_rules( $rules )
{
    global $wp_rewrite;
    if ( !isset( $wp_rewrite ) )
        $wp_rewrite = new WP_Rewrite;

    $m1 = $wp_rewrite->preg_index(1); // preg match backreferences
    $m2 = $wp_rewrite->preg_index(2);
    $m3 = $wp_rewrite->preg_index(3);

    $rules['country/([^/]+)/([^/]+)s/feed/(feed|rdf|rss|rss2|atom)/?$'] = "index.php?country=$m1&post_type=$m2&feed=$m3";
    $rules['country/([^/]+)/([^/]+)s/(feed|rdf|rss|rss2|atom)/?$'] = "index.php?country=$m1&post_type=$m2&feed=$m3";
    $rules['country/([^/]+)/([^/]+)s/page/?([0-9]{1,})/?$'] = "index.php?country=$m1&post_type=$m2&paged=$m3";
    $rules['country/([^/]+)/([^/]+)s/?$'] = "index.php?country=$m1&post_type=$m2";

    return $rules;
}
add_filter( 'country_rewrite_rules', '__extra_country_rewrite_rules' );

La seconde est moins dynamique, car vous auriez besoin de coder en dur les types de publication dans vos réécritures (il n'y a pas d '"identificateur" initial dans l'URL, contrairement à "pays" dans l'ancien).

function __extra_country_rewrite_rules( $rules )
{
    global $wp_rewrite;
    if ( !isset( $wp_rewrite ) )
        $wp_rewrite = new WP_Rewrite;

    $m1 = $wp_rewrite->preg_index(1); // preg match backreferences
    $m2 = $wp_rewrite->preg_index(2);
    $m3 = $wp_rewrite->preg_index(3);

    $rules["(event|contact)s/country/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$"] = "index.php?post_type=$m1&country=$m2&feed=$m3";
    $rules["(event|contact)s/country/([^/]+)/(feed|rdf|rss|rss2|atom)/?$"] = "index.php?post_type=$m1&country=$m2&feed=$m3";
    $rules["(event|contact)s/country/([^/]+)/page/?([0-9]{1,})/?$"] = "index.php?post_type=$m1&country=$m2&paged=$m3";
    $rules["(event|contact)s/country/([^/]+)/?$"] = "index.php?post_type=$m1&country=$m2";

    return $rules;
}
add_filter( 'rewrite_rules_array', '__extra_country_rewrite_rules' );

Vous devrez vider vos liens permanents pour que les modifications prennent effet (il suffit de visiter la page des paramètres de Permaliens une fois le code ajouté).

Si vous constatez que les choses ne fonctionnent toujours pas correctement, mettez à jour votre question avec le code que vous utilisez pour enregistrer vos types de messages et vos taxonomies personnalisées.

2
TheDeadMedic