Laden Sie WordPress in ein benutzerdefiniertes PHP-Skript:
Sie müssen wichtige WordPress-Kernfunktionen in Ihr benutzerdefiniertes PHP-Skript laden WP_Query
, damit es ordnungsgemäß funktioniert.
Angenommen, Sie haben eine benutzerdefinierte PHP-Datei mit dem Namen my-cron.php
und WordPress ist wie folgt im Webstamm installiert:
public_html/
index.php
my-cron.php <--
wp-load.php
wp-settings.php
...
wp-admin/
wp-content/
wp-includes/
In diesem Setup, wenn Sie verwenden möchten , WP_Query
in my-cron.php
Datei, müssen Sie die laden wp-load.php
Datei. In der my-cron.php
Datei müssen Sie also den folgenden CODE haben:
if ( ! defined('ABSPATH') ) {
/** Set up WordPress environment */
require_once( dirname( __FILE__ ) . '/wp-load.php' );
}
Zugriff auf WP_Query:
Zu diesem Zeitpunkt 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. Dafür müssen Sie entweder die wp_delete_post()
Funktion oder die WPDB
Klasse verwenden. Die Verwendung wp_delete_post()
wird empfohlen, da viele Abhängigkeiten berücksichtigt werden. Wenn Sie jedoch mehr Kontrolle benötigen, können Sie eine WPDB
Klasse oder eine $wpdb
globale Variable verwenden. Seien Sie jedoch vorsichtig, wenn Sie diesen Pfad auswählen.
Mit dem folgenden CODE wird beispielsweise der Beitrag mit der ID gelöscht 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 kombinieren WP_Query
mit wp_delete_post
finden und zu löschen Beiträge , dass erfüllen spezifische Kriterien.
Setup Cron:
Nachdem Sie das benutzerdefinierte PHP-Skript geschrieben haben, müssen Sie den Cron-Job so einrichten, dass er wie folgt als HTTP-Anforderung ausgeführt wird:
5 * * * * wget -q -O - http://your-domain.com/my-cron.php
Sicherheit:
Da für den Zugriff WP_Query
oder die wp_delete_post
Funktion standardmäßig keine Authentifizierung (oder Berechtigung) erforderlich ist , müssen Sie sicherstellen, dass der Zugriff my-cron.php
nicht öffentlich möglich ist. Beispielsweise können Sie am Anfang der my-cron.php
Datei Folgendes hinzufügen , um nur Zugriff zu gewähren localhost
:
$allowed_ip = '127.0.0.1';
if( $allowed_ip !== $_SERVER['REMOTE_ADDR'] ) {
exit( 0 );
}
product
? - Weil mein Problem ist, ich diese Fehlermeldung:PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 8388616 bytes) in /var/www/vhosts/httpdocs/wp-includes/wp-db.php on line 1842