wp_schedule_single_event
函式
wp_schedule_single_event ( $timestamp, $hook, $args = array(), $wp_error = false )
- 引數
-
-
(int)
$timestamp
Unix timestamp (UTC) for when to next run the event.
- Required: 是
-
(string)
$hook
Action hook to execute when the event is run.
- Required: 是
-
(array)
$args
Optional. Array containing arguments to pass to the hook's callback function. Each value in the array is passed to the callback as an individual parameter. The array keys are ignored. Default empty array.
- Required: 否
- Default: array()
-
(bool)
$wp_error
Optional. Whether to return a WP_Error on failure. Default false.
- Required: 否
- Default: false
-
(int)
$timestamp
Unix timestamp (UTC) for when to next run the event.
- 返回值
-
- (bool|WP_Error) True if event successfully scheduled. False or WP_Error on failure.
- 定義位置
-
- wp-includes/cron.php , line 39
- 相關方法
- wp_schedule_eventwp_unschedule_eventwp_reschedule_eventwp_get_scheduled_eventwp_scheduled_delete
- 引入
- 2.1.0
- 棄用
- -
wp_schedule_single_event: 這是一個WordPress的函式,用來安排一個一次性的事件。它允許你指定一個特定的時間和一個將在該時間執行的回撥函式。例如,你可以用這個函式來安排一個指令碼在除夕夜的午夜執行。
安排一個事件,只執行一次。
安排一個鉤子,它將在指定的UTC時間由WordPress觸發。如果預定的時間已過,當有人訪問你的WordPress網站時,該動作將被觸發。
請注意,除非你為每個預定的事件傳遞唯一的`$args’值,否則在現有事件的10分鐘內安排一個具有相同動作鉤子的事件會被忽略。
使用wp_next_scheduled()來防止重複的事件。
使用wp_schedule_event()來安排一個經常性的事件。
function wp_schedule_single_event( $timestamp, $hook, $args = array(), $wp_error = false ) {
// Make sure timestamp is a positive integer.
if ( ! is_numeric( $timestamp ) || $timestamp <= 0 ) {
if ( $wp_error ) {
return new WP_Error(
'invalid_timestamp',
__( 'Event timestamp must be a valid Unix timestamp.' )
);
}
return false;
}
$event = (object) array(
'hook' => $hook,
'timestamp' => $timestamp,
'schedule' => false,
'args' => $args,
);
/**
* Filter to preflight or hijack scheduling an event.
*
* Returning a non-null value will short-circuit adding the event to the
* cron array, causing the function to return the filtered value instead.
*
* Both single events and recurring events are passed through this filter;
* single events have `$event->schedule` as false, whereas recurring events
* have this set to a recurrence from wp_get_schedules(). Recurring
* events also have the integer recurrence interval set as `$event->interval`.
*
* For plugins replacing wp-cron, it is recommended you check for an
* identical event within ten minutes and apply the {@see 'schedule_event'}
* filter to check if another plugin has disallowed the event before scheduling.
*
* Return true if the event was scheduled, false or a WP_Error if not.
*
* @since 5.1.0
* @since 5.7.0 The `$wp_error` parameter was added, and a `WP_Error` object can now be returned.
*
* @param null|bool|WP_Error $pre Value to return instead. Default null to continue adding the event.
* @param stdClass $event {
* An object containing an event's data.
*
* @type string $hook Action hook to execute when the event is run.
* @type int $timestamp Unix timestamp (UTC) for when to next run the event.
* @type string|false $schedule How often the event should subsequently recur.
* @type array $args Array containing each separate argument to pass to the hook's callback function.
* @type int $interval The interval time in seconds for the schedule. Only present for recurring events.
* }
* @param bool $wp_error Whether to return a WP_Error on failure.
*/
$pre = apply_filters( 'pre_schedule_event', null, $event, $wp_error );
if ( null !== $pre ) {
if ( $wp_error && false === $pre ) {
return new WP_Error(
'pre_schedule_event_false',
__( 'A plugin prevented the event from being scheduled.' )
);
}
if ( ! $wp_error && is_wp_error( $pre ) ) {
return false;
}
return $pre;
}
/*
* Check for a duplicated event.
*
* Don't schedule an event if there's already an identical event
* within 10 minutes.
*
* When scheduling events within ten minutes of the current time,
* all past identical events are considered duplicates.
*
* When scheduling an event with a past timestamp (ie, before the
* current time) all events scheduled within the next ten minutes
* are considered duplicates.
*/
$crons = _get_cron_array();
$key = md5( serialize( $event->args ) );
$duplicate = false;
if ( $event->timestamp < time() + 10 * MINUTE_IN_SECONDS ) {
$min_timestamp = 0;
} else {
$min_timestamp = $event->timestamp - 10 * MINUTE_IN_SECONDS;
}
if ( $event->timestamp < time() ) {
$max_timestamp = time() + 10 * MINUTE_IN_SECONDS;
} else {
$max_timestamp = $event->timestamp + 10 * MINUTE_IN_SECONDS;
}
foreach ( $crons as $event_timestamp => $cron ) {
if ( $event_timestamp < $min_timestamp ) {
continue;
}
if ( $event_timestamp > $max_timestamp ) {
break;
}
if ( isset( $cron[ $event->hook ][ $key ] ) ) {
$duplicate = true;
break;
}
}
if ( $duplicate ) {
if ( $wp_error ) {
return new WP_Error(
'duplicate_event',
__( 'A duplicate event already exists.' )
);
}
return false;
}
/**
* Modify an event before it is scheduled.
*
* @since 3.1.0
*
* @param stdClass|false $event {
* An object containing an event's data, or boolean false to prevent the event from being scheduled.
*
* @type string $hook Action hook to execute when the event is run.
* @type int $timestamp Unix timestamp (UTC) for when to next run the event.
* @type string|false $schedule How often the event should subsequently recur.
* @type array $args Array containing each separate argument to pass to the hook's callback function.
* @type int $interval The interval time in seconds for the schedule. Only present for recurring events.
* }
*/
$event = apply_filters( 'schedule_event', $event );
// A plugin disallowed this event.
if ( ! $event ) {
if ( $wp_error ) {
return new WP_Error(
'schedule_event_false',
__( 'A plugin disallowed this event.' )
);
}
return false;
}
$crons[ $event->timestamp ][ $event->hook ][ $key ] = array(
'schedule' => $event->schedule,
'args' => $event->args,
);
uksort( $crons, 'strnatcasecmp' );
return _set_cron_array( $crons, $wp_error );
}
常見問題
FAQs-
如何使用get_users獲取所有使用者列表?
要使用`
get_users`函式獲取所有使用者列表,可以按照以下步驟進行:1. 使用`
get_users`函式呼叫獲取使用者列表:$users = get_users();
2. 您可以按需使用引數來過濾結果。例如,您可以通過角色、使用者ID、使用者登入名等過濾使用者列表。以下是一個根據使用者角色為過濾條件的示例:
$users = get_users( array( 'role' => 'subscriber' // 將角色名稱替換為您要過濾的角色 ) );在上述示例中,將`
role`引數設定為所需的角色名稱來過濾使用者列表。3. 您可以使用迴圈遍歷獲取的使用者列表,並訪問每個使用者的屬性。例如,以下示例將顯示每個使用者的使用者名稱和電子郵件地址:
foreach( $users as $user ) { echo '使用者名稱:' . $user->user_login . ', 電子郵件:' . $user->user_email . ; }在上述示例中,通過`
$user->user_login`和`$user->user_email`訪問每個使用者的使用者名稱和電子郵件地址。請注意,`
get_users`函式預設返回所有使用者,並可以根據需要使用更多引數進行過濾。您可以參閱WordPress官方文件中的`get_users`函式文件,瞭解更多可用引數和用法示例。總結起來,使用`
get_users`函式獲取所有使用者列表的步驟是:- 呼叫`
get_users`函式獲取使用者列表。 - 使用可選的過濾引數,根據需要過濾使用者列表。
- 使用迴圈遍歷使用者列表,並訪問每個使用者的屬性。
- 呼叫`
-
如何使用WP_PLUGIN_DIR和WP_PLUGIN_URL定義外掛的目錄和URL?
在WordPress中,可以使用WP_PLUGIN_DIR和WP_PLUGIN_URL常量來定義外掛的目錄路徑和URL。
1. `WP_PLUGIN_DIR`:這是一個常量,用於定義外掛的目錄路徑(檔案系統路徑)。您可以使用以下程式碼在外掛檔案中訪問該常量:
$plugin_dir = WP_PLUGIN_DIR . '/your-plugin-folder/';
在上述程式碼中,將"your-plugin-folder"替換為您外掛的實際資料夾名稱。使用該常量,您可以獲取外掛檔案的完整路徑。
2. `WP_PLUGIN_URL`:這是一個常量,用於定義外掛的URL(用於在網頁上訪問外掛檔案)。以下是一個使用該常量的示例:
$plugin_url = WP_PLUGIN_URL . '/your-plugin-folder/';
同樣,請將"your-plugin-folder"替換為您外掛的實際資料夾名稱。使用該常量,您可以獲取外掛在網頁上的完整URL。
請注意,`WP_PLUGIN_DIR`和`WP_PLUGIN_URL`常量在WordPress版本2.6之後引入。從WordPress 5.5版本開始,這兩個常量被標記為過時(deprecated),因為WordPress更傾向於使用新的外掛檔案結構。如果您正在開發新外掛,建議使用新的外掛檔案結構和相關函式。
在新的外掛檔案結構中,可以使用以下函式來獲取外掛的目錄路徑和URL:
- `plugin_dir_path()`:獲取外掛目錄路徑。
- `plugin_dir_url()`:獲取外掛URL。這些函式會自動將外掛的版本、多站點和SSL等考慮因素納入計算。
總結起來,使用`WP_PLUGIN_DIR`和`WP_PLUGIN_URL`常量定義外掛的目錄和URL的方法是:
$plugin_dir = WP_PLUGIN_DIR . '/your-plugin-folder/'; $plugin_url = WP_PLUGIN_URL . '/your-plugin-folder/';
但請注意,這兩個常量已被標記為過時,建議使用新的外掛檔案結構和相關函式來獲取外掛的路徑和URL。
-
如何使用PHP在WordPress中新增自定義功能?
使用PHP在WordPress中新增自定義功能可以通過以下方式實現:
- 建立一個自定義外掛,將功能程式碼新增到外掛中。
- 使用WordPress的鉤子系統,將自定義功能繫結到適當的鉤子上。
- 在主題檔案中新增自定義功能程式碼,例如functions.php檔案。
- 使用WordPress的短程式碼功能,將自定義功能封裝為短程式碼。
- 使用WordPress的外掛或主題編輯器,將自定義功能程式碼新增到適當的位置。
下面是一個實操示例。
要在WordPress中新增自定義功能,可以按照以下步驟使用PHP編寫並新增自定義功能:
- 開啟WordPress安裝目錄中的主題資料夾,通常位於wp-content/themes/下,找到正在使用的主題資料夾。
- 在主題資料夾中,可以建立一個名為functions.php的檔案。如果該檔案已經存在,可以直接編輯它。
- 在functions.php檔案中,可以使用PHP程式碼新增自定義功能。以下是一些常見的示例:
// 新增自定義功能示例 // 1. 建立自定義短程式碼 function custom_shortcode() { return '這是我的自定義短程式碼內容'; } add_shortcode('custom', 'custom_shortcode'); // 2. 自定義小工具 function custom_widget() { echo '這是我的自定義小工具內容'; } register_widget('custom_widget'); // 3. 自定義選單 function custom_menu() { register_nav_menu('custom-menu', '自定義選單'); } add_action('after_setup_theme', 'custom_menu'); // 4. 自定義頁面模板 function custom_page_template() { /* Template Name: 自定義模板 */ // 自定義模板的內容和樣式 } - 編輯完functions.php檔案後,儲存並上傳到WordPress主題資料夾中。
請注意,修改主題檔案可以在主題更新時丟失,因此建議在進行任何更改之前備份functions.php檔案。此外,為避免不必要的錯誤和衝突,建議在新增自定義功能前先了解WordPress開發文件和最佳實踐,以確保正確、安全地實現所需的自定義功能。
-
如何進行WordPress資料庫查詢優化?
-
如何使用do_action來觸發一個鉤子函式?
使用
do_action函式可以觸發一個鉤子函式。do_action函式的引數與要觸發的鉤子函式的引數相同。例如,觸發save_post鉤子函式的程式碼如下:
do_action( 'save_post', $post_ID, $post );
這裡,
$post_ID和$post是傳遞給鉤子函式的引數。 -
如何使用wp_get_current_user獲取當前登入使用者的資訊?
使用
wp_get_current_user獲取當前登入使用者的資訊:$current_user = wp_get_current_user(); // 獲取當前使用者的ID $user_id = $current_user->ID; // 獲取當前使用者的使用者名稱 $user_login = $current_user->user_login; // 獲取當前使用者的郵箱 $user_email = $current_user->user_email; // 獲取當前使用者的顯示名稱 $display_name = $current_user->display_name;
