web-dev-qa-db-fra.com

Lien permanent personnalisé avec taxonomie dynamique pour le type de message personnalisé - Fonctionne, mais rompt les autres liens permanents

Mon lien permanent permalien avec la taxonomie dynamique fonctionne pour mon type de message personnalisé. Cependant, il casse tous mes autres permaliens. Ils affichent une erreur 404 dans la zone de contenu (l’en-tête et la barre latérale sont toujours affichés).

J'ai utilisé le code suivant pour créer les permaliens dynamiques pour le type de publication personnalisé:

/*Adds Custom Permalinks for Course Segments*/
function custom_post_link($post_link, $id = 0)
{
  $post = get_post($id);

  if(!is_object($post) || $post->post_type != 'course-segment')
  {
    return $post_link;
  }
  $course = 'course-segment';

  if($terms = wp_get_object_terms($post->ID, 'course'))
  {
    $course = $terms[0]->slug;
  }
  return str_replace('%course%', $course, $post_link);

  return $post_link;
}

add_filter('post_type_link', 'custom_post_link', 1, 3);

J'ai également ajouté ce qui suit à ma fonction create_post_type():

'rewrite' => array('slug' => '%course%')

J'ai obtenu le code pour le faire à partir de: https://stackoverflow.com/questions/7723457/wordpress-custom-type-permalink-containing-taxonomy-slug .

En commentant simplement les deux lignes de code suivantes, mes anciens permaliens fonctionnent, mais bien sûr mes dynamiques ne fonctionnent pas:

//add_filter('post_type_link', 'custom_post_link', 1, 3);


//'rewrite' => array('slug' => '%course%')

Dans Settings, mes permaliens sont définis sur %postname%.

Toutes les pensées ou idées sur la façon dont je peux obtenir à la fois mes permaliens normaux et mes permaliens dynamiques de type publication personnalisée seraient très appréciées! -Marque

2
Mark Rummel

Si vous utilisez WordPress 3.0.1 ou une version ultérieure, votre problème réside dans la déclaration de filtre 'post_type_link' et les arguments de la fonction.

Lorsque le filtre 'post_type_link' est appliqué, il transmet les 4 arguments suivants:

apply_filters('post_type_link', $post_link, $post, $leavename, $sample);

Mais votre fonction accepte $ post_link et $ id.

Essayez les ajustements suivants:

function custom_post_link( $post_link, $post ) {

    if ( $post->post_type != 'course-segment')
        return $post_link;

    $course = 'course-segment';
    if( $terms = wp_get_object_terms( $post->ID, 'course' ) )
        $course = $terms[0]->slug;

    return str_replace( '%course%', $course, $post_link );

}
add_filter( 'post_type_link', 'custom_post_link', 1, 2 );
2
Rachel Carden

Rachel a raison. Le problème n'est pas le filtre. Si vous le supprimez complètement, le problème persiste à cause du% taxonomie% (avec les symboles de pourcentage) en tant que slug de type publication personnalisé.

J'ai essayé d'utiliser un non-tag (sans les symboles de pourcentage) et tout le reste fonctionne, mais je ne peux pas le remplacer complètement par les taxonomies - c'est-à-dire qu'il n'est pas capturé par le même filtre.

Donc, le remplacement se produit d'une manière ou d'une autre que je ne peux pas comprendre.

Je ne peux pas laisser les CPT montrer la taxonomie dans le permalien ET le reste des posts/pages fonctionner en même temps. C'est l'un ou l'autre.

Je pense que cela a quelque chose à voir avec wp recherchant taxo/postname AVANT page/sous-page ou ne pas essayer les deux avant de renvoyer un 404, mais c'est trop avancé pour moi.

CECI FONCTIONNE PARTIELLEMENT (publications 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 posts, mais les pages (pour lesquelles la deuxième ligne add_rewrite_rule était) étaient toujours brisées.

Mes coordonnées sont ici.

La taxonomie dynamique dans permalink fait tous les autres messages pas trouvé? Malheureusement, je n'avais pas trouvé cette question auparavant ou je n'avais pas posté la mienne.

Toute idée sera appréciée

0
sergio