web-dev-qa-db-fra.com

Inclure WP_Query dans le mien PHP fichier?

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?

7
Jan

Chargez WordPress dans un script personnalisé PHP:

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' );
}

Accéder à WP_Query:

À 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";
}

Supprimer les messages:

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.

Setup Cron:

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

Sécurité:

É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 );
}
9
Fayaz

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.

0
Kinna T