Eu tenho um tipo de post personalizado que eu quero acessar através do jQuery - de preferência usando JSON.
Então, as primeiras coisas primeiro. criar uma função que retorne / eco json é fácil, mas como eu a acessaria através do jquery.
como Mike escreve nesta pergunta , ele - tanto quanto eu entendo - coloca-o na raiz do wordpress. o que tornaria acessível usando o nome do arquivo php - mas isso é recomendável? Prefiro colocá-lo dentro de uma pasta de plugins.
Eu tentei ler o codex wordpress, mas a maneira como as chamadas ajax são manipuladas me confunde, pois você está postando todas as chamadas ajax no admin-ajax.php, mesmo que não seja uma página de administrador?
Alguém pode resolver os problemas que estou tendo?
/Tempestade
editar
O problema que tive foi entender como as chamadas ajax seriam feitas no wordpress, bem como onde colocar seu código php e js para fazer / manipular as chamadas.
Na outra questão à qual vinculei, você criou uma função colocando o arquivo na raiz wp - não quero fazer isso. Mas agora eu aprendi como usar a wp_ajax_ (nopriv _) [action] e posso acessar efetivamente o json que eu criei. O problema restante é onde eu devo colocar o JS para fazer a chamada. Eu quero colocá-lo no arquivo plugins js, mas como isso deve ser apresentado em uma página, não no site de administração, o ajaxurl não está definido, então eu tenho que ecoar usando php.
echo admin_url('admin-ajax.php');
Portanto, a questão passa a ser: como devo combinar esse php com o javascript e como devo enfileirá-lo, visto que não é um arquivo ou um script.
Respostas:
Ajax Handler
É realmente um pouco confuso que o manipulador do Ajax esteja no
wp-admin/
diretório, mas sim, você pode e deve usá-lo também para solicitações não administrativas. Em seguida, você registra um manipulador para owp_ajax_nopriv_[action]
gancho, em vez do normalwp_ajax_[action]
. Nesse caso, você só precisa seguir as primeiras linhas deadmin-ajax.php
, uma vez que uma solicitação feita por um usuário que não está logado já deixará a página em torno da linha 50.Portanto, registre uma função para o gancho
wp_ajax_nopriv_get_custom_post_data
, e ela será chamada se você solicitaradmin-ajax.php
com oaction
parâmetro definido comoget_custom_post_data
. Certifique-se de ligardie()
no final do seu manipulador, caso contrário, o padrãodie(-1)
será retornado. E também registre a versão conectadawp_ajax_get_custom_post_data
(para a mesma função de manipulador, sem problemas), pois se você estiver conectado ao seu site, não terá problemasnopriv
.Configuração do servidor para Javascript
O truque para enviar dados de configuração do servidor (como o
admin-ajax.php
URL) éwp_localize_script()
. Você passa uma matriz de chaves e valores que serão incluídos na parte superior da página. Provavelmente, isso foi originalmente criado apenas para cadeias localizáveis, mas você também pode usá-lo para passar dados de configuração.storm_json_config
é o nome do identificador (se você deseja removê-lo da fila mais tarde),storm_config
é o nome do objeto Javascript que conterá seus dados. Portanto, seu arquivo Javascript estático pode conter uma linha comojQuery.post(storm_config.ajaxurl, ...)
.Veja também a resposta do bueltge a uma pergunta semelhante .
Javascript estático no diretório dir do plugin
Para carregar um arquivo Javascript estático a partir do seu próprio diretório de plug-in, use
wp_enqueue_script()
. Isso seria algo como isto:Onde
storm_json
está novamente um nome de identificador, você fornece o link para o arquivo, as dependências (podem sernull
) e um número de versão que será adicionado após a solicitação para superar os caches do navegador nas atualizações.fonte
wp_localize_script()
qual você pode enviar dados de configuração do servidor para o navegador. (Small dica: Se você adicionar@
a um nome de usuário, essa pessoa receberá uma notificação da sua resposta assim.@Mike: I updated the title
Que se certificar de que ele vê o seu comentário)