Add_rewrite_rule (..) aceita somente “index.php” como alvo de redirecionamento?

4

Eu quero criar um permalink (chris-admin) para um site de back-end de administração personalizado localizado no diretório do meu tema filho (wp-content / themes / t25child / UI /). Foi brincar com o Wordpress 'reescrever as regras para conseguir isso e notei um comportamento estranho:

add_rewrite_rule(
        '^chris-admin/(.*)$',
        'wp-content/themes/t25child/UI/$1',
        'top'
    );

A regra nem é aceita pelo wordpress. Eu tentei por horas e percebi que o wordpress só aceita regras que possuem index.php como alvo de redirecionamento . A regra abaixo está funcionando como um encanto.

add_rewrite_rule(
            '^foo/([^/]*)/?',
            'index.php?pagename=$matches[1]&param=foo',
            'top'
        );

Alguém pode me dar mais informações sobre isso?

Muito obrigado!
-Chris

    
por ChrisBr 10.05.2017 / 12:20

1 resposta

2

Existem dois sistemas de reescrita diferentes quando você tem lindos permalinks habilitados.

O primeiro é o mod_rewrite do Apache, que basicamente envia qualquer solicitação que não seja para um diretório ou arquivo físico para o arquivo index.php do WordPress principal.

O segundo sistema é interno ao WordPress, e lida com a conversão de permalinks em seus componentes de consulta, para que o banco de dados possa ser consultado sobre o conteúdo solicitado.

Agora, sua pergunta: O add_rewrite_rule (..) aceita somente o "index.php" como alvo de redirecionamento?

Não, você pode adicionar os dois tipos de regras por meio de add_rewrite_rule . O WordPress procurará index.php e adicionará essa regra às regras internas ou, de outro modo, adicionará à matriz de regras externas.

Então, se esse é o caso, por que sua regra não está funcionando? Primeiro, verifique se a regra não entrou no arquivo .htaccess. Para que novas regras sejam gravadas no .htaccess, as regras precisam ser liberadas, mas não um flush comum. flush_rewrite_rules aceita um único argumento booleano, que é falso por padrão. Definir isso como true fará com que o WordPress gere novamente o arquivo .htaccess, e sua regra deve aparecer.

    
por Milo 10.05.2017 / 17:45