サポート » 使い方全般 » スケジュールを実行してくれません

  • 解決済 meijinochoco

    (@meijinochoco)


    スケジュールが実行されず困っています。

    下記に書かれている「every_1min」というスケジュールの登録方法はどこがおかしいのか、ご指摘いただけませんでしょうか?<(_ _)>

    require_once dirname(__FILE__) . '/tmhOAuth-master/tmhOAuth.php';
        function tweetPost(){
            //トークンなどの設定
            $tmhOAuth  = new tmhOAuth(array(
                "consumer_key" => 'xxxxx',
                "consumer_secret" => 'xxxxx',
                "user_token" => 'xxxxx',
                "user_secret" => 'xxxxx',
                'curl_ssl_verifypeer' => false
            ));
    
            //ツイートする記事の取得
            $post = get_posts(array(
                'numberposts' => '1',
                'orderby' => 'rand',
                'post_type' => 'post',
                'meta_key' => 'checkbox_on',
                'meta_value' => 'on',
            ));
    
            //ツイートするテキスト
            $params = array(
                'status' => mb_strimwidth('投稿しました。'.strip_tags($post[0]->post_title), 0, 116, "...") . ' ' . get_permalink($post[0]->ID)
            );
    
            //ツイートする処理
            $code = $tmhOAuth->request(
                'POST',
                'https://api.twitter.com/1.1/statuses/update.json',
                $params,
                true,
                true
            );
    
        }
    
    /**
     * ここからが問題
     * ----------------------------------------------------------------------------
     */
     
    // 1分に1回のスケジュールを追加する 
    	function my_add_intervals($schedules) {
    
    		$schedules['every_1min'] = array(
    			'interval' => 60,
    			'display' => __('Every 1 minutes')
    		);
    		return $schedules;
    	}
    	add_filter( 'cron_schedules', 'my_add_intervals');
    	
    // 1分に1回のスケジュールを実行する
    	add_action('tweetcron', 'tweetPost');
    	function my_activation() {
    	if ( !wp_next_scheduled( 'tweetcron' ) ) {
    		wp_schedule_event(time(), 'every_1min', 'tweetcron');
    		}
    	}
    	add_action('wp', 'my_activation');

    尚、上の冒頭で呼び出している「tmhOAuth.php」というライブラリはこちらです。
    tmhOAuth(ダウンロード:https://github.com/themattharris/tmhOAuth

13件の返信を表示中 - 1 - 13件目 (全13件中)
  • actionが存在しない為、実行されないだけです。

    スレッド開始 meijinochoco

    (@meijinochoco)

    ご返信ありがとうございます。

    add_action(‘tweetcron’, ‘tweetPost’);
    add_action(‘wp’, ‘my_activation’);

    とあるようですが、これではなぜダメなのでしょうか?
    宜しくお願いいたします。

    tweetPostのアクションが無いからです。
    関数リファレンス/wp schedule event

            //ツイートする処理
            $code = $tmhOAuth->request(
                'POST',
                'https://api.twitter.com/1.1/statuses/update.json',
                $params,
                true,
                true
            );
    
        }
    add_action( 'tweetPost', 'tweetPost' );
    • この返信は3年、 10ヶ月前にmanboが編集しました。
    • この返信は3年、 10ヶ月前にmanboが編集しました。
    スレッド開始 meijinochoco

    (@meijinochoco)

    そのようにadd_action( 'tweetPost', 'tweetPost' );を追加してもダメな様子です。。

    ちなみに下記のように「hourly」で「毎時間」にすると、ちゃんと作動するのです。

    require_once dirname(__FILE__) . '/tmhOAuth-master/tmhOAuth.php';
        function tweetPost(){
            //トークンなどの設定
            $tmhOAuth  = new tmhOAuth(array(
                "consumer_key" => 'xxxxx',
                "consumer_secret" => 'xxxxx',
                "user_token" => 'xxxxx',
                "user_secret" => 'xxxxx',
                'curl_ssl_verifypeer' => false
            ));
    
            //ツイートする記事の取得
            $post = get_posts(array(
                'numberposts' => '1',
                'orderby' => 'rand',
                'post_type' => 'post',
                'meta_key' => 'checkbox_on',
                'meta_value' => 'on',
            ));
    
            //ツイートするテキスト
            $params = array(
                'status' => mb_strimwidth('投稿しました。'.strip_tags($post[0]->post_title), 0, 116, "...") . ' ' . get_permalink($post[0]->ID)
            );
    
            //ツイートする処理
            $code = $tmhOAuth->request(
                'POST',
                'https://api.twitter.com/1.1/statuses/update.json',
                $params,
                true,
                true
            );
    
        }
    
    //ここまでは一緒
    
    //ここにadd_action( 'tweetPost', 'tweetPost' );がなくても下記のように「hourly」ならちゃんと「毎時間」実行されるようです
    	
    // 毎時間スケジュールを実行する
    	add_action('tweetcron', 'tweetPost');
    	function my_activation() {
    	if ( !wp_next_scheduled( 'tweetcron' ) ) {
    		wp_schedule_event(time(), 'hourly', 'tweetcron');
    		}
    	}
    	add_action('wp', 'my_activation');

    有無関係なく動かないならサイトにアクセスが無いからではないですか?
    wpだとサイトにアクセスしなければスケジュールが追加されないので。

    スレッド開始 meijinochoco

    (@meijinochoco)

    そ、そういうことなのですね…!?

    あれ、でも私の一個前の返信に書いたコード(hourlyのやつです)はadd_action('wp', 'my_activation');ですけれど、私がアクセスせず放っておいても毎時間実行されますよ?(noindexにしているので私以外アクセスすることはないと思います。)

    noindexは検索エンジンに「インデックしないでくれ』という指示であってアクセスそのものを防ぐわけではないので、パスワード認証でも設けてない限りクローラー等のアクセスは必ずありますけど。

    スレッド開始 meijinochoco

    (@meijinochoco)

    なるほど、なるほど。

    どうもありがとうございます。

    ところでそのアクセスというのは、同じIPアドレスだったり、またはキャッシュが残っていたりすると、「アクセスだぞ」とカウントされませんでしょうか?

    自分でアクセスして確認してみたいのですが、1分経ってもスケジュールが実行されないので、どういうものなのかな?と思いまして。

    meijinochocoさん、こんばんは。

    「WP Crontrol」というプラグインで原因の切り分けを行うと良いかと思います。
    有効化するとwp-cronに登録されているスケジュール一覧がでてきます。
    また「今すぐ実行」ボタンがあるので、まずきちんと動作しているか確認してみてください。

    尚、同じIPであればカウントされるかと思います。キャッシュはわかりません。。。

    • この返信は3年、 10ヶ月前にso-taroが編集しました。
    スレッド開始 meijinochoco

    (@meijinochoco)

    こんばんは、夜分に失礼いたします。

    そのようなプラグインがあったのですね!

    <?php
    /*
    Plugin Name: My WP-Cron Test
    */
    
    echo '<pre>'; print_r( _get_cron_array() ); echo '</pre>';
    
    function bl_print_tasks() {
        echo '<pre>'; print_r( _get_cron_array() ); echo '</pre>';
    }
    ?>

    とやらで出力してみても、どうにもよくわからず困っておりました。。

    「今すぐ実行」は本当に助かりますね!
    hourlyだから1時間待ってましたよ。笑

    早速使わせて頂きます。

    スレッド開始 meijinochoco

    (@meijinochoco)

    ななな、「WP Crontrol」、なんて便利なのでしょう。

    これ、functions.phpに書いてあるスケジュールを、こんな便利なインターフェイスから編集できるのですか??う、嘘ですよね?笑

    試しに自分で登録した「4時間に1回」:を「朝10時」にセットしてみました。

    これで出来たら感謝すぎます。。

    それでは、おやすみなさいませ。

    meijinochocoさん、おはようございます。

    ワードプレスの疑似クーロンを利用する場合だと、下記のような形にすれば毎日13時に実行されるようです。

    wp_schedule_event( ceil( time() / 86400 ) * 86400 + ( 13 - get_option( 'gmt_offset' ) ) * 3600, 'daily', 'my_daily_event' );
    【参考】
    WordPress の疑似cronの実行時間を調整する

    【検索キーワード】
    wp-cron 疑似cron

    ただしあくまで疑似クーロンなので、アクセスがないと実行されないので、それを定時におこなうようであれば、サーバー側のCronで、ちょくせつ該当のphpファイルを実行すると良いようです。
    (manboさんから教えてもらったのですが、まだテストできていません。。)

    スレッド開始 meijinochoco

    (@meijinochoco)

    so-taroさん、こんにちは。
    本当に助かりました。無事実行されていました。(今起きましたww)
    便利なプラグインがあるものですね。
    疑似クーロンの方法と参考も、わかりやすく大変感謝です。

    manboさんも、何度もお付き合い頂き誠にありがとうございます。
    今回はひとまずプラグインでの方法にさせて頂きました。

13件の返信を表示中 - 1 - 13件目 (全13件中)
  • トピック「スケジュールを実行してくれません」には新たに返信することはできません。