J'ai essayé d'obtenir un titre de showreel et un identifiant de vidéo dans une URL accessible par la page.
j'ai les deux dans la même URL et cela ne fonctionne pas ou un seul entre. Actuellement, la page n'est pas trouvée? (Je rince constamment les permaliens)
Je souhaite obtenir des variables qui ressembleront à directeurs/test-director/showreel / nom-showreel / vidéo / 111 /
Le site se trouve actuellement dans un dossier de test appelé independent_02 mais vous ne savez pas si cela affecte quelque chose?
voici le code;
function wpse13483_init() {
add_rewrite_rule( 'directors/(.+?)/showreels/([^/]+)?/?$', 'index.php?category_name=$matches[1]&showreel=a', 'top' );
add_rewrite_rule( 'directors/(.+?)/showreels/([^/]+)/video/([^/]+)?/?$', 'index.php?category_name=$matches[1]&showreel=c1&video=c2', 'top' );
// directors is a custom post_type and should go to single-directors.php
add_rewrite_rule( 'showreels/(.+?)/video/([^/]+)?/?$', 'index.php?category_name=$matches[1]&video=b', 'top' );
// showreels is a custom post_type and should go to single-showreels.php
}
add_action( 'init', 'wpse13483_init' );
Toute aide appréciée!
UPDATES- cette règle fonctionne à présent principalement et intercepte les variables. Cependant, il va archiver.php et non director-single.php?
add_rewrite_rule( 'directors/(.+?)/showreels/([^/]*)/video/([^/]*)/?', 'index.php?post_type=directors&showreel=$matches[2]&video=$matches[3]', 'top' );
// directors is a custom post_type and should go to single-directors.php
je pense que c'est à voir avec '? post_type = director' mais je ne trouve aucune référence à ce que cela devrait être de charger single.php
UPDATE 2 En regardant Rewrite analyzeri pense qu'il manque la variable post_type?
Cela semble fonctionner!
? post_type = directeurs & nom = $ correspond [1] semble être la clé
add_rewrite_rule( 'directors/([^/]*)/showreels/([^/]*)/video/([^/]*)/?', 'index.php?post_type=directors&name=$matches[1]&showreel=$matches[2]&video=$matches[3]', 'top' );
code final donc maintenant;
function wpse13483_init() {
add_rewrite_rule( 'directors/([^/]*)/showreels/([^/]*)/video/([^/]*)/?', 'index.php?post_type=directors&name=$matches[1]&showreel=$matches[2]&video=$matches[3]', 'top' );
}
add_action( 'init', 'wpse13483_init' );
function wpa52794_query_vars( $vars) {
$vars[] = 'video';
$vars[] = 'showreel';
return $vars;
}
add_filter( 'query_vars', 'wpa52794_query_vars' );
WordPress supprimera les variables de requête qu'il ne comprend pas par défaut. Ainsi, en plus d'enregistrer vos règles de réécriture personnalisées, vous également devez enregistrer vos variables de requête personnalisées.
add_filter( 'query_vars', 'wpa52794_query_vars' );
function wpa52794_query_vars( $vars ) {
$vars[] = 'video';
$vars[] = 'showreel';
return $vars;
}
Juste pour compléter la réponse, vous devez également spécifier les variables de requête habituelles attendues par WordPress. Votre exemple initial ne transmet pas le post_type
ni rien qui identifie le message (ID, nom, slug, etc.) comme vous l'avez déjà noté dans vos propres commentaires Sans cela, WordPress ne comprend pas comment router la demande en interne.
Félicitations pour avoir découvert cela avec un analyseur de réécriture. C'était bien la pièce manquante.
En plus de la réponse de @EAMann, je peux dire que vous devez effacer les règles de réécriture.
@EAMann answer :
add_filter( 'query_vars', 'wpa52794_query_vars' );
function wpa52794_query_vars( $vars) {
$vars[] = 'video';
$vars[] = 'showreel';
return $vars;
}
Règles de réécriture Flushing :
function myplugin_activation() {
flush_rewrite_rules();
}
register_activation_hook ( __FILE__, 'myplugin_activation' );
function myplugin_deactivation() {
flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'myplugin_deactivation' );