WORDPRESS add_filter ( 'cron_schedules', ...) nicht in einer PHP-Klasse arbeiten

stimmen
1

Ich habe versucht, ein neues Zeitintervall für eine WP_CRON zu erklären. Wenn ich es in einer PHP-Datei tun es funktioniert. Wenn ich es in einer PHP-Klasse zu tun ist es nicht.

Kann jemand sehen, was mache ich falsch?

Ich verwende das Plugin cron Ansicht zu prüfen , ob die Erklärung funktioniert oder nicht.

Wenn ich dieses Problem lösen Ich denke, es wird auch mein Problem lösen zu wissen, warum mein Cron-Job in der Klasse nicht ausgelöst wird, aber funktioniert, wenn in einer Klasse nicht.

=> Datei myplugin.php

function set_up_option_page() {
    add_options_page( [...]);
}
add_action( 'admin_menu', 'set_up_option_page' );

function do_some_rock() {

    $instance = My_Plugin_Class::instance();

    if ( isset($_POST['action']) && 'do-magic' == $_POST['action'] ) {
        $instance->do_stuff();
    }else{
        // Display the form.
    <?
    }
}

=> Datei My_Plugin_Class.php

<?php

if ( ! defined( 'ABSPATH' ) ) exit;

class My_Plugin_Class {

    private static $_instance = null;

    public function __construct () {

[...] 

        add_filter( 'cron_schedules', array($this,'cron_time_intervals'));

    } 

    public function cron_time_intervals( $schedules ) {
        echo ——— cron time intervals —— ;
        $schedules['minutes_1'] = array(
            'interval' => 10*60,
            'display'   => 'Once 10 minutes'
        );

        return $schedules;
    }

    public static function instance () {
        if ( is_null( self::$_instance ) ) {
            self::$_instance = new self();
        }
        return self::$_instance;
    } // End instance ()

Freundliche Grüße.

Veröffentlicht am 23/05/2015 um 03:27
vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
1

Ich bin nicht sicher, aber versuchen dies.

   add_filter( 'cron_schedules', array($this,'cron_time_intervals'),1);

Und überprüfen cron_time_intervals () Function Call ist oder nicht.

Beantwortet am 23/05/2015 um 06:38
quelle vom benutzer

stimmen
2

Ich bin fast sicher , dass do_some_rock()nicht jedes Mal aufgerufen wird - nur dann , wenn jemand auf dieser Seite geht. Sie können sich bewegen add_filter( 'cron_schedules', array($this,'cron_time_intervals'));von Ihrem Klassenkonstruktors zur Haupt Plugin - Datei myplugin.php und mehr oder weniger so etwas tun

add_action( 'admin_menu', 'set_up_option_page' );
$instance = My_Plugin_Class::instance();
add_filter( 'cron_schedules', array($instance ,'cron_time_intervals'));

Eine zusätzliche Frage. Hat My_Plugin_ClassKonstruktor keinen Code enthält , den Sie verhindern , dass bei jeder Anfrage ausgeführt werden?

Beantwortet am 27/05/2015 um 08:29
quelle vom benutzer

stimmen
2

Ich denke, der richtige Weg, dies zu tun, eine bestimmte Klasse für meine Cron haben. Diese Klasse wird auf jede Anforderung instanziiert aus diesem Grund den Code nicht in einer Klasse mit einer statischen Instanz sein sollte wie vorher. Auch ich denke, es ist besser, die Cron außerhalb der Plugin-Klasse für Logik haben und saubereren Code Zweck. Dank Lukas Pawlik für die Hilfe.

 if (!defined('ABSPATH')) exit;

    new My_Cron();

    class My_Cron {

        public function __construct() {
            add_filter('cron_schedules', array($this, 'cron_time_intervals'));
            add_action( 'wp',  array($this, 'cron_scheduler'));
            add_action( 'cast_my_spell', array( $this, 'auto_spell_cast' ) );
        }

        public function cron_time_intervals($schedules)
        {
            $schedules['minutes_10'] = array(
                'interval' => 10 * 60,
                'display' => 'Once 10 minutes'
            );
            return $schedules;
        }

        function cron_scheduler() {
            if ( ! wp_next_scheduled( 'cast_my_spell' ) ) {
                wp_schedule_event( time(), 'minutes_10', 'cast_my_spell');
            }
        }

        function auto_spell_cast(){
            My_Plugin_Class::instance()->launch_spell();
        }
    }
Beantwortet am 28/05/2015 um 03:08
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more