web-dev-qa-db-de.com

Wordpress-Cronjob alle 3 Minuten

es gibt viele Beiträge zu Stackoverflow zu diesem Thema, aber (ich weiß nicht warum) funktioniert nichts für mich.

Was ich habe

function isa_add_every_three_minutes( $schedules ) {

    $schedules['every_three_minutes'] = array(
            'interval'  => 180,
            'display'   => __( 'Every 3 Minutes', 'textdomain' )
    );

    return $schedules;
}
add_filter( 'cron_schedules', 'isa_add_every_three_minutes' );


function every_three_minutes_event_func() 
{
    // do something
}

wp_schedule_event( time(), 'every_three_minutes', 'every_three_minutes_event_func' );

Irgendwelche Ideen, was ich falsch mache?

16
Peter

Sie müssen add_action() verwenden, um Ihre Funktion mit dem geplanten Ereignis zu verknüpfen.

add_action( 'isa_add_every_three_minutes', 'every_three_minutes_event_func' );

Hier ist der vollständige Code .

// Add a new interval of 180 seconds
// See http://codex.wordpress.org/Plugin_API/Filter_Reference/cron_schedules
add_filter( 'cron_schedules', 'isa_add_every_three_minutes' );
function isa_add_every_three_minutes( $schedules ) {
    $schedules['every_three_minutes'] = array(
            'interval'  => 180,
            'display'   => __( 'Every 3 Minutes', 'textdomain' )
    );
    return $schedules;
}

// Schedule an action if it's not already scheduled
if ( ! wp_next_scheduled( 'isa_add_every_three_minutes' ) ) {
    wp_schedule_event( time(), 'every_three_minutes', 'isa_add_every_three_minutes' );
}

// Hook into that action that'll fire every three minutes
add_action( 'isa_add_every_three_minutes', 'every_three_minutes_event_func' );
function every_three_minutes_event_func() {
    // do something
}
?>
20
Shivam Mathur

sie haben vergessen, den Befehl add_action () zu verwenden.

Sehen Sie sich dieses Beispiel an: http://wpguru.co.uk/2014/01/wie-

5
andrepaulo

Zunächst ist es wichtig, wo sich dieser Code befindet. Ist er in Ihrer functions.php für Ihr Thema? Oder ist es ein benutzerdefiniertes Plugin, das Sie entwickeln?

Durch meine Erfahrung ist es sowohl einfacher, cron über ein benutzerdefiniertes Plugin zu debuggen als auch zu aktivieren, und Aktivierungshaken zum Aktivieren und Deaktivieren von Ereignissen verwenden. Ich hatte harte Zeiten beim Aktivieren von cron-Ereignissen durch Funktionen von php. Ich bevorzuge es, diese Ereignisse durch benutzerdefinierte Plugins zu aktivieren.

Ich würde mit einer Plugin-Struktur wie folgt beginnen:

  • / mein-cron-plugin
  • /my-cron-plugin/index.php
  • /my-cron-plugin/my-cron-plugin.php

inhalt von index.php:

<?php // silence is golden

my-cron-plugin.php-Inhalte:

<?php

/**
 * Plugin name: My Custom Cron Plugin
 * Description: Simple WP cron plugin boilerplate.
 * Author: Your name
 * Version: 0.1
 */

// Security reasons...
if( !function_exists( 'add_action' ) ){
    die('...');
}

// The activation hook
function isa_activation(){
    if( !wp_next_scheduled( 'isa_add_every_three_minutes_event' ) ){
        wp_schedule_event( time(), 'every_three_minutes', 'isa_add_every_three_minutes_event' );
    }
}

register_activation_hook(   __FILE__, 'isa_activation' );

// The deactivation hook
function isa_deactivation(){
    if( wp_next_scheduled( 'isa_add_every_three_minutes_event' ) ){
        wp_clear_scheduled_hook( 'isa_add_every_three_minutes_event' );
    }
}

register_deactivation_hook( __FILE__, 'isa_deactivation' );


// The schedule filter hook
function isa_add_every_three_minutes( $schedules ) {
    $schedules['every_three_minutes'] = array(
            'interval'  => 180,
            'display'   => __( 'Every 3 Minutes', 'textdomain' )
    );
    return $schedules;
}

add_filter( 'cron_schedules', 'isa_add_every_three_minutes' );


// The WP Cron event callback function
function isa_every_three_minutes_event_func() {
    // do something
}

add_action( 'isa_add_every_three_minutes_event', 'isa_every_three_minutes_event_func' );

Nachdem Sie dieses Plugin eingerichtet haben, sollte das Ereignis nach der Aktivierung des Plugins aktiviert werden. Um zu testen, ob es funktioniert, verwenden Sie dieses Plugin: https://wordpress.org/plugins/wp-crontrol/

Eine andere gute Quelle, um zu verstehen, wie WP cron funktioniert, ist: https://developer.wordpress.org/plugins/cron/

0
MrZiggyStardust