web-dev-qa-db-fra.com

% tag% dans permalien ne fonctionne pas

J'utilise une structure personnalisée permalien:

/% tag% /% postname% /

et ça ne marche pas. Je reçois l'URL - http://mydomain.com/%tag%/post/ . Donc, il n'y a pas de nom de tag, juste% tag%. Si je place% category% à la place de% tag%, tout va bien.

Quelqu'un peut-il résoudre ce problème?

2
atari

J'ai le code suivant pour travailler dans WP 3.0.1 et WP 3.1 RC 2, mais avec une différence importante. Avant 3.1, la structure de balise est explicitement définie en tant que %tag%, mais en 3.1 cela devient %post_tag%. Donc, mon code gère les deux situations. Il ajoute un crochet à get_permalink() et insère une balise si nécessaire.

define( 'WPSE_7004_DEFAULT_TAG', 'untagged' );
if ( version_compare( $wp_version, '3.0.9' ) <= 0 ) {
    // This is pre-3.1
    define( 'WPSE_7004_TAG_STRUCT', '%tag%' );
} else {
    define( 'WPSE_7004_TAG_STRUCT', '%post_tag%' );
}

add_filter( 'post_link', 'wpse7004_post_link', 10, 3 );
function wpse7004_post_link( $permalink, $post, $leavename )
{
    if ( FALSE !== strpos( $permalink, WPSE_7004_TAG_STRUCT ) ) {
        $tags = get_the_tags( $post->ID );
        if ( $tags ) {
            usort( $tags, '_usort_terms_by_ID' );
            $tag = $tags[0]->slug;
        } else {
            // No tag. Use default tag name, otherwise rewrite rule matching goes wrong.
            $tag = WPSE_7004_DEFAULT_TAG;
        }
        $permalink = str_replace( WPSE_7004_TAG_STRUCT, $tag, $permalink );
    }

    return $permalink;
}

add_filter( 'request', 'wpse7004_request' );
function wpse7004_request( $query_vars )
{
    if ( array_key_exists( 'tag', $query_vars ) && WPSE_7004_DEFAULT_TAG == $query_vars['tag'] ) {
        unset( $query_vars['tag'] );
    }
    return $query_vars;
}
1
Jan Fabry

@Atari a demandé une solution .. Les personnes qui n'en ont pas ne devraient pas se mêler!

J'ai le même problème. Toutes les autres catégories%%% postname%% post_id% etc. résolvent correctement, mais% tag% reste% tag% dans le dernier permalien!

Je pense que c'est un bug. Je suis tombé sur un correctif qui était pour une version plus ancienne. Je ne l'ai pas encore essayé (je ne sais pas comment l'utiliser non plus: P) car j'utilise la dernière version (3.0.4 je pense) .. mais le problème est toujours là!

Je ne veux pas commencer l'URL avec% tag% mais j'en ai besoin en bas de l'URL. Le fait est que cela devrait fonctionner .. peu importe comment je l'utilise!

@Atari si vous trouvez une solution, merci de la partager :)

voici le patch que j'ai trouvé .. J'apprécierais que quiconque me dise comment l'utiliser aussi :)


*** link-template.php   2009-12-14 05:09:55.000000000 -0500
--- link-template_patched.php   2010-06-21 14:29:24.000000000 -0400
***************
*** 88,93 ****
--- 88,94 ----
                $leavename? '' : '%postname%',
                '%post_id%',
                '%category%',
+         '%tag%',
                '%author%',
                $leavename? '' : '%pagename%',
        );
***************
*** 128,134 ****
--- 129,151 ----
                                $category = is_wp_error( $default_category ) ? '' : $default_category->slug;
                        }
                }
+
+               if ( strpos($permalink, '%tag%') !== false ) {
+                       $tags = get_the_tags($post->ID);
+
+                       if ( $tags ) {
+                               usort($tags, '_usort_terms_by_ID'); // order by ID
+                               $tag = $tags[0]->slug;
+                       }

+                       // show default tag in permalinks, without
+                       // having to assign it explicitly
+                       if ( empty($tag) ) {
+                               $default_tag = get_tag( get_option( 'default_category' ) );
+                               $tag = is_wp_error( $default_tag ) ? '' : $default_tag->slug;
+                       }
+               }
+
                $author = '';
                if ( strpos($permalink, '%author%') !== false ) {
                        $authordata = get_userdata($post->post_author);
***************
*** 147,152 ****
--- 164,170 ----
                        $post->post_name,
                        $post->ID,
                        $category,
+             $tag,
                        $author,
                        $post->post_name,
                );
1
Devgan