it-swarm.com.de

WP_Query in meine eigene einbinden PHP Datei?

Ich möchte einen Cronjob für mich selbst schreiben. Ich muss jedoch Zugriff auf WP_Query und die Berechtigungen zum Löschen von Posts usw. haben.

Meine Frage ist nun, wie kann ich die Funktion WP_Query in meine eigene PHP -Datei aufnehmen und muss ich einige Berechtigungen bearbeiten oder ändern, um Beiträge mit diesem Cronjob zu löschen oder zu erstellen?

7
Jan

Lade WordPress in ein benutzerdefiniertes PHP Skript:

Sie müssen wichtige WordPress-Kernfunktionen in Ihr benutzerdefiniertes PHP Skript laden, damit WP_Query ordnungsgemäß funktioniert.

Angenommen, Sie haben eine benutzerdefinierte PHP -Datei mit dem Namen my-cron.php und WordPress ist im Webstamm wie folgt installiert:

public_html/
    index.php
    my-cron.php <--
    wp-load.php
    wp-settings.php
    ...
    wp-admin/
    wp-content/
    wp-includes/

Wenn Sie in diesem Setup WP_Query in my-cron.php-Datei verwenden möchten, müssen Sie die wp-load.php-Datei laden. In der my-cron.php-Datei muss also der folgende CODE vorhanden sein:

if ( ! defined('ABSPATH') ) {
    /** Set up WordPress environment */
    require_once( dirname( __FILE__ ) . '/wp-load.php' );
}

Zugriff auf WP_Query:

An dieser Stelle haben Sie Zugriff auf WP_Query, sodass Sie es folgendermaßen verwenden können:

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

Beiträge löschen:

WP_Query hat jedoch keine Löschfunktion. Dazu müssen Sie entweder die wp_delete_post() function oder WPDB class verwenden. Die Verwendung von wp_delete_post() wird empfohlen, da dies viele Abhängigkeiten berücksichtigt. Wenn Sie jedoch mehr Kontrolle benötigen, können Sie WPDB class oder $wpdb global variable verwenden. Seien Sie jedoch vorsichtig, wenn Sie diesen Pfad auswählen.

Der folgende CODE löscht beispielsweise den Beitrag mit der 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";  
}

Natürlich können Sie WP_Query mit wp_delete_post kombinieren, um Beiträge zu finden und zu löschen, die bestimmten Kriterien entsprechen.

Setup Cron:

Sobald Sie mit dem Schreiben des benutzerdefinierten Skripts PHP fertig sind, müssen Sie cron job einrichten als HTTP-Anforderung ausführen, z.

5 * * * * wget -q -O - http://your-domain.com/my-cron.php

Sicherheit:

Da für den Zugriff auf WP_Query oder wp_delete_post standardmäßig keine Authentifizierung erforderlich ist (oder Erlaubnis), müssen Sie sicherstellen, dass my-cron.php nicht öffentlich zugänglich ist. Beispielsweise können Sie am Anfang der my-cron.php-Datei Folgendes hinzufügen, um nur auf localhost zuzugreifen:

$allowed_ip = '127.0.0.1';
if( $allowed_ip !== $_SERVER['REMOTE_ADDR'] ) {
    exit( 0 );
}
9
Fayaz

Ist dies zum Löschen oder Erstellen von Websites in einer WordPress Multisite-Umgebung? In diesem Fall können Sie auf WP_Query zugreifen, um Websites zu verwalten, indem Sie die Funktion in eine PHP -Datei in einem vom Netzwerk aktivierten mu-plugin-Ordner einfügen.

0
Kinna T