add_rewrite_rule não está carregando a página correta nem obtendo variáveis

4

Estou tentando obter um título e um ID de vídeo showreel em um URL que pode ser acessado pela página.

Eu tenho os dois na mesma URL e ou não funciona ou apenas um vem dentro Atualmente a página não está sendo encontrada? (estou constantemente liberando os permalinks)

URL que eu quero que as variáveis sejam parecidas diretores / diretor de teste / showreel / nome do showreel / video / 111 /

O site atualmente está em uma pasta de teste chamada independent_02 , mas não tem certeza se isso afeta alguma coisa?

aqui está o código;

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' );

Qualquer ajuda apreciada!

ATUALIZAÇÕES - essa regra agora está funcionando e capturando as variáveis. No entanto, ele vai arquivar.php e não diretores-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

Eu acho que tem a ver com o '? post_type = directors' mas não consigo encontrar qualquer referência do que isso deve ser para carregar single.php

UPDATE 2 Olhando para o analisador de reconfiguração acho que falta a variável post_type?

    
por v3nt 21.05.2012 / 17:25

3 respostas

2

Isso parece funcionar!

? post_type = diretores e nome = $ matches [1] parece ser a chave

add_rewrite_rule( 'directors/([^/]*)/showreels/([^/]*)/video/([^/]*)/?', 'index.php?post_type=directors&name=$matches[1]&showreel=$matches[2]&video=$matches[3]', 'top' );

para o código final agora;

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' );
    
por v3nt 30.05.2012 / 11:46
2

O WordPress removerá variáveis de consulta que não entende por padrão. Portanto, além de registrar suas regras de reescrita personalizadas, você também precisa registrar suas variáveis de consulta personalizadas.

add_filter( 'query_vars', 'wpa52794_query_vars' );
function wpa52794_query_vars( $vars ) {
    $vars[] = 'video';
    $vars[] = 'showreel';

    return $vars;
}

Só para completar a resposta, você também precisa especificar as variáveis de consulta regulares que o WordPress espera. Seu exemplo original não está passando o post_type ou qualquer coisa para identificar o post (ID, nome, slug, etc) como você já observou em seus próprios comentários. Sem isso, o WordPress não entende como encaminhar a solicitação internamente.

Parabéns por descobrir isso com um analisador de reescrita. Essa foi realmente a peça que faltava.

    
por EAMann 21.05.2012 / 17:50
0

Além da resposta do @EAMann, posso dizer que você precisa liberar regras de reescrita.

@ Resposta do EAMann :

add_filter( 'query_vars', 'wpa52794_query_vars' );
function wpa52794_query_vars( $vars) {
    $vars[] = 'video';
    $vars[] = 'showreel';

    return $vars;
}

Regras de regravação de 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' );
    
por Eugene Manuilov 28.05.2012 / 15:05