2012-12-06 3 views
3

J'ai un plugin qui importe les données csv dans les tables de wordpress. Il traverse le tableau de bord Wordpress où vous entrez des détails et cliquez sur un bouton pour l'exécuter.Wordpress PHP Cron emplois

J'ai modifié le plugin de sorte que les données d'entrée sont statiques (à partir du même csv à chaque fois) et sont maintenant tous situés dans un fichier php. Je veux planifier un travail Cron pour exécuter ce script toutes les heures.

J'ai essayé de le configurer en utilisant cPanel et d'accéder directement au fichier php mais cela ne fonctionne pas (rien ne s'affiche). Je crois que c'est parce que le plugin utilise des fonctions wordpress telles que wp_insert_post. Comment puis-je exécuter ce script, comme s'il était exécuté dans le tableau de bord wordpress, en tant qu'événement planifié?

Remarque: le fichier contient également du javascript.

+1

Je ne pense pas que le JS sera exécuté si vous utilisez un travail cron normal. A part cela, vous avez deux options pour faire cela - ajouter 'require_once (dirname (dirname (dirname (dirname (__FILE__)))). '/wp-load.php');' et garder le travail cron de la même manière , ou faites un appel 'wget' au cronjob' http: //yoursite.com/? run_cron = randomCharactersHere', puis enveloppez votre script dans un callback 'init' hook et cochez' if (isset ($ _GET [ 'run_cron']) && $ _GET ['run_cron'] == 'randomCharactersHere'' C'est à vous de décider, mais le JS ne sera pas exécuté (vous avez besoin d'un navigateur pour cela) –

+0

Merci pour l'entrée :) – Lance

Répondre

4

Vous devez inclure 2 fichiers pour accéder aux fonctions côté administrateur: d'abord, wp-load.php. wp-load.php obtient tout mis en place, et déclenche wordpress. Cependant, vous appelez cette fonction à partir du dossier plugin, dans le répertoire content (par opposition au répertoire admin) - donc quand wp-load est appelé, vous ne serez pas dans la section admin, et vous n'aurez pas accès à ces fonctions. Du bon côté, vous n'avez pas non plus à traiter avec WordPress vous obligeant à vous connecter. Puisque vous avez toujours besoin de ces fonctions d'administration, incluez wp-admin/admin-functions.php. Cela charge le côté admin et vous donne accès aux fonctions d'administration - et vous êtes prêt à aller

+0

merci tellement qui a fonctionné comme un charme :) Désolé je ne peux pas upvote, pas assez rep =/ – Lance

+0

Bonne réponse mec. Une variante de votre réponse a bien fonctionné pour moi. À votre santé. – usumoio

1

Vous devez utiliser wp_schedule_event. Voir dans le codex WordPress ici: http://codex.wordpress.org/Function_Reference/wp_schedule_event. Utilisez quelque chose comme ceci:

  register_activation_hook(__FILE__, 'my_activation'); 
      add_action('my_hourly_event', 'do_this_hourly'); 

      function my_activation() { 
       wp_schedule_event(time(), 'hourly', 'my_hourly_event'); 
      } 

      function do_this_hourly() { 
       // do something every hour 
      } 

Vous pouvez parfaitement appeler un fichier PHP dans votre fonction do_this_hourly().

+0

Cool merci, je vais considérer cela si je rencontre plus de problèmes – Lance

+0

Il ya seulement une chute des événements WordPress - ils ne se déclencheront que si quelqu'un visite le site. S'ils le visitent plus tard que le temps requis, ils ne travailleront pas à temps. Mais il peut toujours planifier un cron 'wget' pour s'assurer qu'il fonctionnera à temps. –

+0

True, la tâche wp_schedule_event ne peut être exécutée qu'avec la première visite de page après l'heure planifiée. Si toutes les heures, cela signifie que vous avez besoin d'au moins un visiteur par heure. – barakadam

0

La réponse acceptée a bien fonctionné pour moi. J'ai modded ceci, et voici mes conclusions. C'est le cas que vous pouvez utiliser cette solution en dehors d'un scénario de plug-in. Fondamentalement, vous pouvez faire fonctionner votre serveur en utilisant des tâches cron en utilisant la fonctionnalité native wordpress comme suit. Vous pouvez créer un fichier au niveau supérieur de votre application wordpress, puis include /wp-load.php;.

Ceci charge dans wordpress natif et vous permet d'appeler une classe que vous pouvez définir dans le cadre de vos plugins doivent utiliser. Ensuite, votre bon d'aller en ce qui concerne la fonctionnalité de base wordpress, des choses comme $wpdb et get_usermeta()

Maintenant vous pouvez instancier votre classe avec $class_variable = new YourClass; et de là, vous pouvez appeler des fonctions de classe. La grande partie à ce sujet est que vous pouvez planifier des tâches cron comme vous le feriez normalement sur votre serveur, et quand vous avez votre fonction wordpress fonctionne comme il le ferait dans wordpress. Cela signifie que vous n'avez pas besoin de conserver vos tâches cron dans le cadre d'un plugin, ce qui peut être utile ou non, selon ce que vous faites.