2010-10-21 5 views
0

Je développe un plugin et j'ai une petite question ... J'ai d'abord développé mon plugin en tant que page web individuelle et je l'intègre maintenant dans un WP plugin. Tout fonctionnait correctement avant WP et fonctionne presque correctement maintenant, mais j'ai rencontré un problème intéressant. Quoi qu'il en soit, à ma question ... Y at-il une sorte de problème en utilisant une fonction jQuery .post() à partir de la barre latérale WP? Je suis en train de faire ce genre de chose ...Utiliser jQuery post() ou load() dans un plugin Wordpress

jQuery.post("php/draw_calendar.php", 
{month: currentMonth, year: 
currentYear - 2000, days: 
daysInMonth}, function(data){ 
     jQuery("#Calender").html(data); 
     jQuery("#eventDialog").dialog({ autoOpen: false, resizable: false, 
width: 300, minHeight: 200 }); 
    jQuery("#eventDialog").bind(
"dialogopen", function(event, ui) {}); 
    }); 

Tout en jQuery fonctionne très bien, sauf qu'il semble que les données renvoyées à partir du fichier est jamais ajouté au code HTML et tout ce qui est retourné est « Cette est une variable '.

Je pense que cela peut avoir à faire quelque chose avec la façon dont les chemins pourraient fonctionner dans jQuery et Wordpress, mais je suis un peu perdu sur ce qu'il faut faire. Je n'ai pas vu d'autres informations à ce sujet sur le web alors peut-être que je fais juste quelque chose de stupide.

Merci.

+0

Eh bien, je me suis dit une partie de la solution ... seulement pour apporter une autre question. Si je code dans un chemin absolu cela fonctionne bien ... c'est-à-dire 'http: // localhost: 8888/wordpress/wp-contenu/plugins/swamped-event-calendar/js /' ou quelque chose comme ça. De toute évidence, c'est une façon terrible de le faire. Donc, mes questions se résument à la façon dont je pourrais utiliser un chemin relatif ici. jQuery dans wordpress n'utilise clairement pas de références similaires à CSS où le répertoire courant est le chemin des fichiers CSS lui-même. Toute information serait grandement appréciée! – Ryan

+0

pouvez-vous essayer d'utiliser/avant ur chemin comme -> "/php/draw_calendar.php"? Le/indique un parent du chemin actuel ... – Mulki

+0

C'était la première chose que j'ai essayée. Ça n'a pas marché. Je peux appeler un chemin relatif comme/wordpress/wp-content/plugins/swamped-event-calendar mais ce n'est pas mieux qu'un chemin absolu je pense. Comme il aurait le nom du plugin codé en dur dans la source. – Ryan

Répondre

3

Vous devriez chercher le bon répertoire pour votre WP Plugin avec l'API WP (bloginfo()) ... quelque chose comme:

jQuery.post("<?php bloginfo('wpurl'); ?>/wp-content/plugins/calendar/draw_calendar.php", 

Comme le souligne Brad sur vous devez utiliser wpurl. De même, comme écrit awats, vous pourriez utiliser la constante WP pour le répertoire du plugin. Je ne sais pas très bien comment il est formaté:

jQuery.post("<?php echo PLUGINDIR; ?>/calendar/draw_calendar.php", 

également de la determining plugin and content pages page, il semble que vous pouvez utiliser plugin_basename();:

jQuery.post("<?php echo plugin_basename(); ?>/calendar/draw_calendar.php", 
+0

Je crois que vous voudriez en fait 'bloginfo ('wpurl')', car 'bloginfo ('url')' ne serait pas correct si l'emplacement d'installation wordpress de l'utilisateur n'est pas le même que son adresse de site (qui peut être changé en le panneau d'administration Wordpress). Aussi, vous avez besoin du nom du plugin après/plugins /. Bien sûr, vous ne pouvez le faire que si vous utilisez PHP pour sortir le JavaScript. –

+0

Pas une grosse affaire, mais il y a aussi une constante wordpress PHP pour le répertoire du plugin, "PLUGINDIR". http://striderweb.com/nerdaphernalia/2008/08/wordpress-constants/ – awats

+0

J'ai donné ça ... pour une raison quelconque "/ wordpress/wp-content/plugins/swamped-event-calendar/js/test. php "fonctionne et" /wp-content/plugins/draw_calendar.php "ne fonctionne pas. Y at-il des problèmes avec l'appel PHP depuis un fichier js? Je demande car il serait également pratique d'utiliser la variable WP_PLUGIN_URL de wordpress. EDIT: Comme Brad a noté que je ne peux pas le faire parce que mon JS est un fichier en soi et non produit par PHP. – Ryan

0

Est-ce votre course de plug-in sur le côté admin? Dans ce cas, vous pouvez envisager d'utiliser le processeur intégré AJAX. Ainsi, vous pouvez faire quelque chose comme ça ...

<?php 

    add_action('wp_ajax_update_calender', 'update_calender_callback'); 

    function update_calender_callback(){ 
    //perhaps include your calender.php script here 
    // and run the operations you need... 
    } 

    //break the php here in the plugin file and then your js is entered after ?> 
<script type="text/javascript"> 
var calData = { 
month: currentMonth, 
year: currentYear - 2000, 
days: daysInMonth 
action: update_calender //notice we send an action here... 
} 

//The callback function I just copied and pasta from what you had... 
jQuery.post('ajaxurl',calData,function(data){ 
     jQuery("#Calender").html(data); 
     jQuery("#eventDialog").dialog({ autoOpen: false, resizable: false, 
width: 300, minHeight: 200 }); 
    jQuery("#eventDialog").bind(
"dialogopen", function(event, ui) {}); 
    }) 
</script> 

http://codex.wordpress.org/AJAX_in_Plugins

Ou pour une moins élégante, toute solution js vous pouvez essayer ...

jQuery.post(location.protocol+"//"+location.hostname+"/wp-content/plugins/yourpluginname/scriptname", data, function... 
+0

Ce plugin fonctionne comme un widget sur la barre latérale orientée vers l'avant. L'appel AJAX extrait les données requises de la base de données. Il serait trop grand pour extraire toute la table afin que le widget n'intègre que les données demandées par l'utilisateur (qui ne change pas très souvent). – Ryan

+0

Dans ce cas, essayez le js sur la dernière ligne. J'espère que cela fait l'affaire. jQuery.post (location.protocol + "//" + location.hostname + "/ wp-content/plugins/votrepluginname/scriptname", données, fonction ... – awats

Questions connexes