2012-12-06 55 views
3

我有一個將csv數據導入wordpress表格的插件。它通過Wordpress儀表板輸入一些細節並單擊按鈕執行它。Wordpress PHP Cron作業

我已經改變了插件,以便輸入數據是靜態的(每次從同一個csv),現在都位於一個php文件中。我想安排一個Cron作業,每小時執行一次這個腳本。

我試圖使用cPanel進行設置並直接訪問php文件,但它不起作用(不顯示任何內容)。我相信這是因爲插件使用WordPress的功能,如wp_insert_post。

我該如何運行此腳本,就好像它是通過wordpress儀表板運行一樣,作爲預定事件?

注意:該文件還包含一些JavaScript。

+1

我不認爲如果您使用普通的cron作業,JS將被執行。除此之外,你有兩個選擇如何做到這一點 - 添加'require_once(dirname(dirname(dirname(dirname(__FILE__))))。'/wp-load.php');'並保持cron作業的方式相同,或者使cronjob成爲'http://yoursite.com/?run_cron = randomCharactersHere'的'wget'調用,然後將你的腳本包裝在'init'鉤子回調中,並在那裏檢查if(isset($ _GET [ 'run_cron'])&& $ _GET ['run_cron'] =='randomCharactersHere''這取決於你,但仍然不會執行JS(你需要一個瀏覽器) –

+0

感謝您的輸入:) – Lance

回答

4

你必須包含2個文件才能訪問管理員端功能:首先,wp-load.php。 wp-load.php獲取所有設置,並啓動wordpress。但是,您正在從內容目錄內的插件文件夾(而不是admin目錄)調用此函數 - 因此,當調用wp-load時,您不會進入管理部分,也不會訪問到那些功能。在光明的一面,你也不必處理WordPress強制你登錄。既然你仍然需要這些管理功能,請包括wp-admin/admin-functions.php。這會加載管理端,並讓您訪問管理功能 - 並且您將被設置爲

+0

謝謝這麼多的工作就像一個魅力:)對不起,我不能upvote,沒有足夠的代表=/ – Lance

+0

好回答老兄。你的答案的一個變種適合我。乾杯。 – usumoio

1

您應該使用wp_schedule_event。在WordPress代碼中查看:http://codex.wordpress.org/Function_Reference/wp_schedule_event。使用這樣的事情:

  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 
      } 

可以完美地調用PHP文件的do_this_hourly()函數中。

+0

酷感謝我會考慮這個,如果我遇到更多的問題 – Lance

+0

只有一個WordPress事件的倒臺 - 他們只會在有人訪問該網站時觸發。如果他們晚於規定的時間訪問它,那麼他們將無法按時工作。但他總是可以安排一個'wget' cron來確保它能按時運行。 –

+0

確實,wp_schedule_event任務只能在計劃時間之後的第一次訪問時執行。如果按小時計算,這意味着您每小時至少需要一位訪問者。 – barakadam

0

接受的答案對我很好。我改變了這一點,這裏是我的發現。您可以在插件場景之外使用此解決方案。基本上,您可以使用原生wordpress功能使用cron作業運行服務器,如下所示。您可以在wordpress應用程序的頂層創建文件,然後在其中創建include /wp-load.php;

這會加載原生wordpress,並允許您調用一個可以定義爲必須使用插件的一部分的類。然後你的基本WordPress的功能,如$wpdb

事情現在你可以實例化你的類$class_variable = new YourClass;,從那裏你可以調用類的功能。關於這一點的重要部分是,您可以像在服務器上一樣安排cron作業,並且您可以像wordpress一樣運行wordpress函數。這意味着你不需要將你的cron工作作爲一個插件的一部分來維護,根據你的喜好,這可能有用也可能沒用。