Je veux écrire un cronjob pour moi-même. Mais je dois accéder à WP_Query
et aux autorisations pour supprimer des publications, etc.
Ma question est la suivante: comment puis-je inclure la fonction WP_Query
dans mon propre fichier PHP et dois-je modifier certaines autorisations afin de supprimer ou de créer des publications avec ce travail cron?
Vous devez charger les fonctionnalités essentielles de WordPress dans votre script PHP personnalisé pour que WP_Query
fonctionne correctement.
Par exemple, supposons que vous ayez un fichier personnalisé PHP nommé my-cron.php
et que WordPress soit installé à la racine du site Web, comme suit:
public_html/
index.php
my-cron.php <--
wp-load.php
wp-settings.php
...
wp-admin/
wp-content/
wp-includes/
Dans cette configuration, si vous souhaitez utiliser WP_Query
dans le fichier my-cron.php
, vous devez charger le fichier wp-load.php
. Donc, dans le fichier my-cron.php
, vous devez avoir le code suivant:
if ( ! defined('ABSPATH') ) {
/** Set up WordPress environment */
require_once( dirname( __FILE__ ) . '/wp-load.php' );
}
À ce stade, vous aurez accès à WP_Query
. Vous pourrez donc l'utiliser comme ceci:
// simply selecting posts with category name "wordpress"
$the_query = new WP_Query( array( 'category_name' => 'wordpress' ) );
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
}
else {
echo "No post found for category named wordpress";
}
Cependant, WP_Query n'a pas de fonction delete. Pour cela, vous devrez soit utiliser la fonction wp_delete_post()
function ou WPDB
class. Il est recommandé d’utiliser wp_delete_post()
car il s’occupera de nombreuses dépendances. Toutefois, si vous avez besoin de plus de contrôle, vous pouvez utiliser la variable globale WPDB
class ou $wpdb
, mais soyez prudent si vous choisissez ce chemin.
Par exemple, le code suivant supprimera la publication portant l'ID 1
:
$deleted = wp_delete_post( 1 );
if( $deleted === false ) {
echo "Couldn't delete Post with ID=1";
}
else {
echo "Deleted Post with ID=1";
}
Bien sûr, vous pouvez combiner WP_Query
avec wp_delete_post
pour rechercher et supprimer des publications répondant à des critères spécifiques.
Une fois que vous avez terminé d'écrire le script personnalisé PHP, vous devez configurer le travail cron pour s'exécuter en tant que requête HTTP, comme suit:
5 * * * * wget -q -O - http://your-domain.com/my-cron.php
Étant donné que l'accès à WP_Query
ou wp_delete_post
, la fonction ne nécessite aucune authentification (ou autorisation) par défaut, vous devez vous assurer que my-cron.php
n'est pas accessible au public. Par exemple, vous pouvez ajouter ce qui suit au début du fichier my-cron.php
pour donner accès à localhost
uniquement:
$allowed_ip = '127.0.0.1';
if( $allowed_ip !== $_SERVER['REMOTE_ADDR'] ) {
exit( 0 );
}
S'agit-il de supprimer ou de créer des sites dans un environnement WordPress multisite? Si tel est le cas, vous pouvez accéder à WP_Query pour gérer les sites en plaçant la fonction dans un fichier PHP situé dans un dossier du plug-in mu activé par le réseau.