Estou tentando criar um terminal de API personalizado no WordPress e preciso redirecionar solicitações para uma página virtual na raiz do WordPress para uma página real que é fornecida com meu plug-in. Então, basicamente, todos os pedidos para uma página são realmente roteados para a outra.
Exemplo:
http://mysite.com/my-api.php
=>http://mysite.com/wp-content/plugins/my-plugin/my-api.php
O objetivo é tornar o URL do terminal da API o mais curto possível (semelhante a http://mysite.com/xmlrpc.php
enviar o arquivo real do terminal da API com o plug-in, em vez de exigir que o usuário mova arquivos na instalação e / ou hack core .
Minha primeira tentativa foi adicionar uma regra de reescrita personalizada. No entanto, isso teve dois problemas.
- O ponto final sempre teve uma barra final. Tornou-se
http://mysite.com/my-api.php/
- Minha regra de reescrita foi aplicada apenas parcialmente. Não redirecionaria para
wp-content/plugins...
, redirecionaria paraindex.php&wp-content/plugins...
. Isso levou o WordPress a exibir um erro de página não encontrada ou apenas padronizar a página inicial.
Idéias? Sugestões?
fonte
get_query_vars()
no meu-api.php. Eu verifiquei quais variáveis estão carregadas. E o único var definido é umWP object
chamado$wp
. Como acessar ou transformar isso em umWP_Query
objeto para que eu possa acessar as variáveis passadasget_query_vars()
?include
um arquivo, ele é executado no escopo atual. Nesse caso, é awpse9870_parse_request
função que possui apenas o$wp
parâmetro É possível que o$wp_query
objeto global não tenha sido definido no momento, portantoget_query_var()
não funcionará. No entanto, você tem sorte:$wp
é a classe que contém oquery_vars
membro que você precisa - eu mesmo o uso no código acima.Isso funcionou para mim. Eu nunca toco na API de reescrita, mas estou sempre pronto para me impulsionar em novas direções. O seguinte funcionou no meu servidor de teste para 3.0, localizado em uma subpasta localhost. Não vejo nenhum problema se o WordPress estiver instalado na raiz da web.
Basta soltar esse código em um plug-in e enviar o arquivo chamado "taco-kittens.php" diretamente na pasta do plug-in. Você precisará escrever um hard flush para seus permalinks. Eu acho que eles dizem que o melhor momento para fazer isso é na ativação do plugin.
Muitas felicidades, -Mike
fonte
add_rewrite_rule( 'taco-kittens', 'wp-content/plugins/taco-kittens.php', 'top' );
Alguma razão para não fazer algo assim?
http://mysite.com/?my-api=1
Em seguida, basta conectar seu plug-in em 'init' e verificar se essa variável é obtida. Se existir, faça o que seu plug-in precisa fazer e morra ()
fonte
Talvez eu não esteja entendendo suas perguntas completamente, mas um código de acesso simples resolveria seu problema?
Passos:
A nova página atua como um ponto final da API e seu código de acesso envia solicitações para o código do plug-in em http://mysite.com/wp-content/plugins/my-plugin/my-api.php
(é claro que isso significa que meu-api.php teria o código abreviado definido)
Provavelmente, você pode automatizar as etapas 1 e 2 através do plug-in.
fonte
Ainda não lidei com reescrever muito, então isso provavelmente é um pouco difícil, mas parece funcionar:
Funciona se você conectar isso a 'generate_rewrite_rules', mas deve haver uma maneira melhor, pois você não deseja reescrever .htaccess em cada carregamento de página.
Parece que não consigo parar de editar minhas próprias postagens ... provavelmente deve entrar em você para ativar o retorno de chamada e referenciar global $ wp_rewrite. E, em seguida, remova a entrada de non_wp_rules e a saída para .htaccess novamente, ao desativar o retorno de chamada.
E, finalmente, a escrita em .htaccess deve ser um pouco mais sofisticada, você deseja substituir apenas a seção wordpress.
fonte
Eu tinha um requisito semelhante e queria criar vários pontos de extremidade com base em slugs únicos que apontavam para o conteúdo gerado pelo plug-in.
Dê uma olhada na fonte do meu plugin: https://wordpress.org/extend/plugins/picasa-album-uploader/
A técnica que usei começa adicionando um filtro para
the_posts
examinar a solicitação recebida. Se o plug-in deve lidar com isso, uma postagem fictícia é gerada e uma ação é adicionadatemplate_redirect
.Quando a
template_redirect
ação é chamada, ela deve resultar na saída de todo o conteúdo da página a ser exibido e sair ou deve retornar sem saída gerada. Veja o códigowp_include/template-loader.php
e você verá o porquê.fonte
Estou usando outra abordagem que consiste em forçar a página inicial a carregar um título, conteúdo e modelo de página personalizados .
A solução é muito elegante, pois pode ser implementada quando um usuário segue um link amigável, como http://example.com/ ? Plugin_page = myfakepage
É muito fácil de implementar e deve permitir páginas ilimitadas.
Código e instruções aqui: Gere uma página personalizada / falsa / virtual do Wordpress em tempo real
fonte
Estou usando uma abordagem semelhante à do Xavi Esteve acima, que parou de funcionar devido a uma atualização do WordPress, tanto quanto pude perceber no segundo semestre de 2013.
Está documentado em grandes detalhes aqui: https://stackoverflow.com/questions/17960649/wordpress-plugin-generating-virtual-pages-and-using-theme-template
A parte principal da minha abordagem é usar o modelo existente para que a página resultante pareça fazer parte do site; Eu queria que fosse o mais compatível possível com todos os temas, espero que nas versões do WordPress. O tempo dirá se eu estava certa!
fonte
é um exemplo real de produção, primeiro crie uma classe de página virtual:
Na próxima etapa, conecte a
template_redirect
ação e lide com sua página virtual como abaixofonte