簡體   English   中英

add_action()未定義錯誤-Wordpress插件

[英]add_action() not defined error - wordpress plugin

我正在開發一個簡單的插件,以計算FB帖子的份額,我想使用cron作業創建插件類的實例。 插件的主要部分是這樣的:

class PostShareCount
{
    public function __construct()
    {
        global $wpdb;
        $this->db = $wpdb;
        add_action('hourly_event',  'updateAllPostsShares');
        add_shortcode('social-count', array($this, 'social_shares'));
    }
  public function updateAllPostsShares()
    {
        $this->db->query('CREATE TABLE IF NOT EXISTS wp_facebook_shares(
        post_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        post_shares INT NOT NULL,
        post_url VARCHAR(255) NOT NULL
        )');

        $posts = $this->db->get_results('SELECT ID, post_date, post_name FROM '.$this->db->posts.' WHERE ID < 3');
        $fb_graph = 'http://graph.facebook.com/?id=';
        $site = 'http://www.example.com/';
        $posts_shares = [];

        foreach ($posts as $post) {
            $post_url = $site.$post->post_name;

            $posts_shares[$post->ID] = array();
            $posts_shares[$post->ID]['post_id'] = $post->ID;
            $posts_shares[$post->ID]['post_url'] = $post_url;

            $api_call = $fb_graph.$site.$post->post_name;
            if (isset($this->get_response_body($api_call)->shares)) {
                $posts_shares[$post->ID]['post_shares'] = $this->get_response_body($api_call)->shares;
            } else {
                $posts_shares[$post->ID]['post_shares'] = rand(80, 1200);
            }

            $this->db->replace('wp_facebook_shares', $posts_shares[$post->ID], array('%d', '%s', '%d'));
        }

        return $posts_shares;
    }
}

為了測試我的cron,我創建了這個簡單的文件:

<?php
require_once ('post-share-count.php');
$obj = new PostShareCount();
$obj->updateAllPostsShares();
?>

但是每當我嘗試運行它時,都會出現此錯誤:

Call to undefined function add_action() in ..

任何想法是什么原因造成的,我該如何解決? 謝謝

有一種更簡單的方法,如何測試您的cronjob:

安裝WP Crontrol插件。 現在,您可以通過管理來運行您的任務。

  1. 轉到WordPress管理:工具-> Cron事件
  2. 如果您的插件正常運行,則應該在此處看到您計划的鈎子名稱。
  3. 單擊立即運行

直接從PHP文件調用函數

如果出於某種原因需要直接從測試PHP文件中調用插件函數,請不要忘記包含wp-load.php。

示例(文件與wp-load.php位於同一目錄中):

<?php
include ('wp-load.php');

$obj = new PostShareCount();
$obj->updateAllPostsShares();

?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM