Cập nhật cài đặt quản trị cập nhật mỗi khi trang chủ bị tấn công?


7

Tôi đã tạo một plugin gửi email với tất cả các đơn đặt hàng vào ngày hôm đó trước X đến email Y. Tôi đã làm theo hướng dẫn tại đây: https://scotch.io/tutorials/how-to-build-a-wordpress- plugin-part-1

Trên mỗi bản cập nhật tùy chọn, nó sẽ loại bỏ tất cả các sự kiện theo lịch trình và thêm các sự kiện mới. Vì một số lý do mà tôi không hiểu, email sẽ gửi bất cứ khi nào ai đó đăng nhập với tư cách quản trị viên truy cập trang chủ. Khi tôi thay đổi và lưu cài đặt, nó dường như dừng lại. Đây là những gì tôi nghĩ là mã có liên quan:

public function options_update() {
    register_setting($this->plugin_name, $this->plugin_name, array($this, 'validate'));
    wp_clear_scheduled_hook('send_woocommerce_daily_order_summary_email');
    $options = get_option($this->plugin_name);
    $timestamp = strtotime($options['send_time'] . ":00:00 " . get_option('timezone_string'));
    wp_schedule_event($timestamp, 'daily', 'send_woocommerce_daily_order_summary_email');
}

Và nơi hành động được thêm vào: `

private function define_admin_hooks() {
    $plugin_admin = new Woocommerce_Daily_Order_Summary_Email_Admin( $this->get_plugin_name(), $this->get_version() );

    $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_styles' );
    $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_scripts' );

    // Add menu item
    $this->loader->add_action( 'admin_menu', $plugin_admin, 'add_plugin_admin_menu' );

    // Add Settings link to the plugin
    $plugin_basename = plugin_basename( plugin_dir_path( __DIR__ ) . $this->plugin_name . '.php' );
    $this->loader->add_filter( 'plugin_action_links_' . $plugin_basename, $plugin_admin, 'add_action_links' );

    // Save/Update our plugin options
    $this->loader->add_action('admin_init', $plugin_admin, 'options_update');
}

Bất cứ ai có thể giúp tôi hiểu tại sao điều này có thể xảy ra?


Bạn đang thêm một hành động để admin_initxóa và lên lịch một sự kiện (dòng cuối cùng của khối mã thứ hai của bạn). admin_initkích hoạt tải trang trong phần quản trị , không phải trên bản cập nhật tùy chọn.
Andrew Bartel

Này Andrew, đó là những gì tôi nghĩ là vấn đề nhưng không thể hiểu nó nên như thế nào. Tôi đã thử thay đổi mọi thứ xung quanh và biến nó thành "tùy chọn_updated" nhưng không có kết quả. Cuối cùng tôi đã tước bỏ cái nồi để đơn giản hóa mã. Bản tóm tắt đã quá mức cần thiết cho một plugin đơn giản này. Tôi đã kết thúc việc mã hóa cứng các tùy chọn mà tôi đã xác định, điều mà tôi không thích, nhưng ít nhất nó cũng hoạt động. Tôi hy vọng tôi sẽ có thể quay lại vấn đề này và tìm cách khắc phục tốt hơn.
tjfo

Làm thế nào bạn đi với @tjfo này? Bạn đã tìm thấy một sửa chữa tốt hơn?
Tim Malone

Xin chào @TimMopol! Tôi không bao giờ trở lại với nó. Không có nhu cầu lớn để làm cho các cài đặt có thể định cấu hình được, vì chúng không nên thay đổi thường xuyên, nếu có. Tôi có thể thử sau khi hoàn thành dự án tiếp theo này, tôi đang làm, chỉ để thỏa mãn sự tò mò của mình!
tjfo

@tjfo Không phải lo lắng. Hãy cho chúng tôi biết bạn đi như thế nào - bạn có thể đăng câu trả lời tự tại đây nếu bạn hiểu ra :)
Tim Malone

Câu trả lời:


1

Một hook tốt hơn để sử dụng sẽ là hook động update_option_ {option_name}, chỉ chạy sau khi tùy chọn cụ thể của bạn được cập nhật. Vì vậy, một cái gì đó như:

add_action('update_option_woocommerce_email_send_time', 'send_time')

function update_send_time() {
     // Add code here to update cron job
}

Vấn đề duy nhất bạn sẽ gặp ở đây là việc lên lịch cho công việc định kỳ sớm hơn thời gian hiện tại sẽ kích hoạt nó để gửi ngay lập tức. Ví dụ: nếu bây giờ là 3:40 chiều và bạn lên lịch gửi email vào lúc 1 giờ chiều, nó sẽ được gửi ngay vì thời gian đó đã trôi qua hôm nay. Nếu bạn lên lịch cho 5 giờ chiều, nó sẽ đợi đến 5 giờ chiều. Có lý?

Những gì tôi có thể làm là lưu trữ một giá trị khác (có thể là sử dụng WordPress Transents) vào ngày cuối cùng email tóm tắt được gửi và sau đó kiểm tra lại giá trị đó trước khi gửi email. Khi email được gửi, tôi sẽ cập nhật tạm thời với ngày hiện tại.

Người giới thiệu:

Hàm update_option - https://developer.wordpress.org/reference/fifts/update_option/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.