2010-11-07 4 views
3

D'avance, je l'ai demandé sur le forum de soutien wordpress mais ils n'étaient pas très utiles. J'espérais que quelqu'un ici pourrait peut-être m'aider.Interrogation d'une fonction dans functions.php?

Ok Je suis un débutant complet quand il s'agit de l'architecture de plugin Wordpress, si nue avec moi. J'ai un code jQuery qui va vérifier quand l'utilisateur est près du bas de la page. Ce n'est pas le problème cependant. Ce jQuery va envoyer une requête AJAX, en lui donnant quelques détails sur ce qu'il faut charger quand l'utilisateur est au bas de la page. Le code ressemble un peu à ce au moment:

$("<div>").load('?ajax=y&offset=something', function() { 

    $(".empty-div").append($(this)); 

    setTimeout(function(){ console.log('after', $(document).height()); }, 0); 
    setTimeout(function(){ console.log('after', $(window).height()); }, 0); 


}); 

Mon principal problème est que je ne sais pas quoi interroger ou comment s'y prendre pour envoyer les informations à la fonction PHP dans functions.php. Par exemple, j'ai en ce moment ce que ma fonction PHP (jusqu'à ce qu'il fonctionne):

function get_posts_page() { 


if(isset($_GET['offset'])) { 
    echo"Hello!"; 
} 

} 

Je suis conscient wordpress a add_action et tout cela, mais je ne sais pas ce que je demande comme une action l'une ou l'autre fonction fait que PHP reçoit les données envoyées par le Javascript. Y a-t-il une URL où toutes les fonctions sont analysées ou quelque chose? Merci d'avance pour toute aide. Alors, comment puis-je obtenir les données du Javascript à la fonction PHP dans functions.php, dans mon répertoire de thème?

Répondre

3

Je viens de faire une vidéo pour vous montrer comment utiliser la requête add_action dans WordPress. Vous pouvez watch it here.

Voici mon javascript

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script> 
<script> 

$('#branding img').click(function() { 

    $.post('<?php bloginfo('siteurl') ?>/wp-admin/admin-ajax.php', { 
    action: 'my_unique_action', 
    offset: 5 
    }, function(data) { 
    $('#content').prepend('<p>' + data + '</p>'); 
    }); 

}); 


</script> 

Et le php que j'ai utilisé dans functions.php

// Make sure it runs when the user is logged in, 
// and when they are not. 
add_action('wp_ajax_my_unique_action', 'get_offset'); 
add_action('wp_ajax_nopriv_my_unique_action', 'get_offset'); 

function get_offset() { 
    if(isset($_POST['offset'])) { 
    echo 'Your ajax request was successful. Here was your offset: <strong>' . $_POST['offset'] . '</strong>'; 
    } 

    die; 
} 

Référence: http://codex.wordpress.org/AJAX_in_Plugins

+0

Bon travail, merci :) – Johnny

-1

Vous essayez d'appeler une fonction PHP depuis Javascript, n'est-ce pas?

Vous aurez besoin de logique sur une page qui appelle get_posts_page(). Soit vous pouvez créer une nouvelle pagegetPostsPage.php?offset= ou vous pouvez mettre une certaine logique dans functions.php, quelque chose comme

 
if(isset($_GET['function']) { 
    switch($_GET['function']) { 
     case 'get_posts_page': 
      get_posts_page(); 
    } 
} 

Cependant, l'ancienne approche est recommandée; vous ne voulez pas que quelqu'un puisse modifier le paramètre function et accéder à deleteAllPosts() de manière malveillante.

Par conséquent:

 
// getPostsPage.php 
require PATH . 'functions.php'; 
get_posts_page(); //checks $_GET['offset'] 

Et rappelez-vous d'échouer gracieusement (ne pas exposer un message d'erreur) si 'offset' n'est pas réglé, ou autre chose.

+0

Voir @Baylor la réponse de Rae comme il est le moyen standard de faire AJAX WordPress, en roulant le vôtre nécessite de manipuler trop de choses (comme la sécurité) qui sont automatiques si vous le faites de manière standard. – MikeSchinkel