首页 > 解决方案 > WordPress - “WP 后台处理”的停止进程

问题描述

我正在使用 WP 后台处理https://github.com/deliciousbrains/wp-background-processing创建一个将一些文件移动到另一台服务器的后台进程。

一切正常,我可以选择文件,将主题添加到队列中并开始移动。一切都很好,但是一旦开始这个过程,我就无法停止它。我希望能够停止后台进程,以防我在文件传输过程中改变主意。

我创建了一个调用这个 php 函数的 ajax 函数。

function me_stop_moving_files(){
    global $wpdb;
    $sql = "SELECT `option_name` AS `name`, `option_value` AS `value`
            FROM  $wpdb->options
            WHERE `option_name` LIKE %s
            ORDER BY `option_name`";


    $wild = '%';
    $find = 'wp_example_process';
    $like = $wild . $wpdb->esc_like( $find ) . $wild;
    $results = $wpdb->get_results( $wpdb->prepare($sql,$like) );

    foreach ( $results as $result ){
        delete_option($result->name);
    }

    $this->process_all->cancel_process();
    wp_clear_scheduled_hook('wp_example_process_cron');

    die('completed');
}

其中cancel_process() 是wp-background-process.php 类的一个方法。乍一看,该过程似乎已停止,但迟早会再次开始。

有没有人对这个图书馆有任何经验并且可以指出我正确的方向?

标签: wordpressbackground-process

解决方案


我以前没有使用过这个库,但是查看代码,似乎可以通过调用类方法来取消进程,如下所示:

function me_stop_moving_files(){
    global $wpdb;
    $sql = "SELECT `option_name` AS `name`, `option_value` AS `value`
            FROM  $wpdb->options
            WHERE `option_name` LIKE %s
            ORDER BY `option_name`";


    $wild = '%';
    $find = 'wp_example_process';
    $like = $wild . $wpdb->esc_like( $find ) . $wild;
    $results = $wpdb->get_results( $wpdb->prepare($sql,$like) );

    foreach ( $results as $result ){
        delete_option($result->name);
    }

    $WP_Background_Process = new WP_Background_Process();
    $Cancel_process = $WP_Background_Process->cancel_process();
    die('completed');
}

推荐阅读