Après avoir ajouté la constante dans wp-config.php
defined('DISABLE_WP_CRON') or define('DISABLE_WP_CRON', true);
Et en supposant que vous avez config.yml
correctement votre configuration, vous pouvez annuler le --path
drapeau lors de l'appel cron run
.
wp cron event run --due-now
[<hook>…]
Un ou plusieurs crochets à exécuter.
[--due-now]
Exécutez tous les crochets dus dès maintenant.
[--all]
Exécutez tous les crochets.
Pour exécuter toutes les tâches cron dues dans l'ordre:
function run_crons_due_now_in_order { for SITE_URL in $(wp site list --fields=url --format=csv | tail -n +2 | sort); do wp cron event run --due-now --url="$SITE_URL" && echo -e "\t+ Finished crons for $SITE_URL"; done; echo "Done"; }; run_crons_due_now_in_order;
Si vous souhaitez qu'ils s'exécutent simultanément (en exécutant d'abord le cron non spécifique au site):
function run_all_crons_due_now { for SITE_URL in $(wp site list --fields=url --format=csv | tail -n +2 | sort); do wp cron event run --due-now --url="$SITE_URL" && echo -e "\t+ Finished crons for $SITE_URL" & done; wait $(jobs -p); echo "Done"; }; run_all_crons_due_now;
Vous souhaitez mettre l'une ou l'autre option dans un fichier exécutable
chmod +x run_all_wp_cron_events_due_now.sh
ajouter une tâche crontab
crontab -e
et probablement exécuter chaque minute
* * * * * run_all_wp_cron_events_due_now.sh > /dev/null
Si vous souhaitez exécuter une commande personnalisée à partir de cron, vous devrez peut-être spécifier les chemins d'accès complets pour que wp-cli fonctionne.
* * * * * cd /home/username/public_html; /usr/local/bin/php /home/username/wp-cli.phar your-custom-cron-commands run >/dev/null 2>&1
PHP
La seule raison pour laquelle vous auriez besoin de charger WordPress ici est de rassembler les URL de la base de données plutôt que d'utiliser une liste prédéfinie. Nous allons seulement cingler ces URL et nous ne nous soucions pas vraiment de la réponse.
custom-cron.php
<?php
// Load WP
require_once( dirname( __FILE__ ) . '/wp-load.php' );
// Check Version
global $wp_version;
$gt_4_6 = version_compare( $wp_version, '4.6.0', '>=' );
// Get Blogs
$args = array( 'archived' => 0, 'deleted' => 0, 'public' => 1 );
$blogs = $gt_4_6 ? get_sites( $args ) : @wp_get_sites( $args ); // >= 4.6
// Run Cron on each blog
echo "Running Crons: " . PHP_EOL;
$agent = 'WordPress/' . $wp_version . '; ' . home_url();
$time = time();
foreach ( $blogs as $blog ) {
$domain = $gt_4_6 ? $blog->domain : $blog['domain'];
$path = $gt_4_6 ? $blog->path : $blog['path'];
$command = "http://" . $domain . ( $path ? $path : '/' ) . 'wp-cron.php?doing_wp_cron=' . $time . '&ver=' . $wp_version;
$ch = curl_init( $command );
$rc = curl_setopt( $ch, CURLOPT_RETURNTRANSFER, false );
$rc = curl_exec( $ch );
curl_close( $ch );
print_r( $rc );
print_r( "\t✔ " . $command . PHP_EOL );
}
Et ajoutez un seul appel à votre custom-cron.php
dans une crontab
* * * * * wget -q -O - http://your-site.com/custom-cron.php?doing_wp_cron
WP-CLI
code principal?