dusmatoff
@dusmatoff
Web...

Как удалить посты через cron?

//delete-packages-with-cron.php
<?php
$parse_uri = explode('wp-content', $_SERVER['SCRIPT_FILENAME']);
require_once($parse_uri[0] . 'wp-load.php');

function deletePackagesOlderOneDay()
{
    $args = array(
        'post_type' => 'package',
        'meta_query' => array(
            array(
                'key' => 'package-origin',
                'value' => array('Брест', 'Гомель', 'Гродно', 'Витебск'),
                'compare' => 'NOT IN',
            )
        ),
        'date_query' => array(
            array(
                'before' => '1 days ago'
            )
        )
    );

    $packages = get_posts($args);

    foreach ($packages as $package) {
        wp_delete_post($package->ID, true);
        echo "Post: " . $package->ID . " deleted.<br>";
        sleep(1);
    }
}

deletePackagesOlderOneDay();

function deletePackagesOlderThreeDay()
{
    $args = array(
        'post_type' => 'package',
        'meta_query' => array(
            array(
                'key' => 'package-origin',
                'value' => array('Брест', 'Гомель', 'Гродно', 'Витебск'),
                'compare' => 'IN',
            )
        ),
        'date_query' => array(
            array(
                'before' => '3 days ago'
            )
        )
    );

    $packages = get_posts($args);

    foreach ($packages as $package) {
        wp_delete_post($package->ID, true);
        echo "Post: " . $package->ID . " deleted.<br>";
        sleep(1);
    }
}

deletePackagesOlderThreeDay();


Запускаю этот файл через cron каждый час. После удаления 5-6 постов, скрипт перестает выполняться, хотя в выборке много записей. В чем ошибка ?

Также добавил второй вариант. Cron в файле functions.php темы

//cron for delete packages
$cronArgs = array(false);
if (!wp_next_scheduled('package_hook_1', $cronArgs)) {
    wp_schedule_event(time(), 'hourly', 'package_hook_1', $cronArgs);
}

add_action('package_hook_1', 'deletePackagesOlderOneDay', 10, 1);

function deletePackagesOlderOneDay()
{
    $args = array(
        'post_type' => 'package',
        'meta_query' => array(
            array(
                'key' => 'package-origin',
                'value' => array('Брест', 'Гомель', 'Гродно', 'Витебск'),
                'compare' => 'NOT IN',
            )
        ),
        'date_query' => array(
            array(
                'before' => '1 days ago'
            )
        )
    );

    $packages = get_posts($args);

    foreach ($packages as $package) {
        wp_delete_post($package->ID, true);
    }
}
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
gaz12
@gaz12
Делаю сайты
в параметрах get_posts() нужно передавать параметр numberposts.
по умолчанию он равен 5.
https://wp-kama.ru/function/get_posts#numberposts-...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы