Como gerenciar chamadas ajax e JSON no wordpress

12

Eu tenho um tipo de postagem 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 retorna / echos json é bastante fácil, mas como eu poderia acessá-la através do jquery.

como Mike escreve em esta pergunta , ele - tanto quanto eu entendo - coloca isso na raiz do wordpress. o que tornaria acessível usando o nome do arquivo php - mas isso é recomendável? Eu preferiria colocá-lo dentro de uma pasta de plugins.

Eu tentei ler o códice wordpress, mas a forma como as chamadas ajax são tratadas apenas me confunde, já que você está postando todas as chamadas ajax para admin-ajax.php, mesmo que não seja uma página de administração?

Alguém por favor pode resolver os problemas que estou tendo?

/ Storm

editar

O problema que tive foi entender como as chamadas do ajax eram feitas no wordpress, bem como onde colocar o seu código php e js para fazer / manipular as chamadas.

Na outra pergunta que eu criei, você criou uma função colocando o arquivo na raiz wp - eu não quero fazer isso. Mas agora eu aprendi como usar o wp_ajax_ (nopriv _) [action] e posso acessar efetivamente o json que eu crio. O problema restante é onde eu deveria colocar o JS para fazer a chamada. Eu quero colocá-lo no arquivo plugins js, mas como isso é para ser apresentado em uma página, não no site admin, ajaxurl não está definido, então eu tenho que eco usando php.

echo admin_url('admin-ajax.php');

Então a questão é como eu devo combinar esse php com o javascript, e como eu deveria enfileirá-lo, visto que não é um arquivo ou um script.

    
por Storm 03.11.2010 / 21:42

1 resposta

17

Manipulador Ajax

É realmente um pouco confuso que o manipulador Ajax esteja no diretório wp-admin/ , mas sim, você pode e deve usá-lo também para solicitações não administrativas. Em seguida, você registra um manipulador para o gancho wp_ajax_nopriv_[action] , em vez do wp_ajax_[action] normal. Neste caso você só tem que seguir as as primeiras linhas de admin-ajax.php , já 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ê solicitar admin-ajax.php com o parâmetro action definido como get_custom_post_data . Certifique-se de chamar die() no final do seu manipulador, senão o die(-1) padrão será retornado. E também registre a versão autenticada, wp_ajax_get_custom_post_data (para a mesma função de manipulador, sem problemas), já que se você estiver logado em seu site, você não irá acessar o nopriv hook.

Configuração do lado 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 no topo da página. Provavelmente, isso foi originalmente criado apenas para strings localizáveis, mas você também pode usá-lo para passar dados de configuração.

wp_localize_script('storm_json_config', 'storm_config', array(
    'ajaxurl' => admin_url('admin-ajax.php'),
));

storm_json_config é o nome do identificador (se você quiser extraí-lo mais tarde), storm_config é o nome do objeto Javascript que conterá seus dados. Portanto, seu arquivo Javascript estático pode conter uma linha como jQuery.post(storm_config.ajaxurl, ...) .

Veja também a resposta do bueltge uma pergunta semelhante .

Javascript estático do diretório de plugins

Para carregar um arquivo Javascript estático do seu próprio diretório de plug-ins, use wp_enqueue_script() . Isso seria algo como isto:

wp_enqueue_script('storm_json', plugin_dir_url(__FILE__) . 'js/json.js', array('jquery'), '20101105');

Em que storm_json é novamente um nome de identificador, você fornece o link para o arquivo, as dependências (podem ser null ) e um número de versão que será adicionado após a solicitação para recuperar caches de navegador atualizações.

    
por Jan Fabry 03.11.2010 / 22:06

Tags