ory->update_indexables_author_to_reassigned( $limit );
},
'clean_orphaned_user_indexables_without_wp_user' => function ( $limit ) {
return $this->cleanup_repository->clean_indexables_for_orphaned_users( $limit );
},
'clean_orphaned_user_indexables_without_wp_post' => function ( $limit ) {
return $this->cleanup_repository->clean_indexables_for_object_type_and_source_table( 'posts', 'ID', 'post', $limit );
},
'clean_orphaned_user_indexables_without_wp_term' => function ( $limit ) {
return $this->cleanup_repository->clean_indexables_for_object_type_and_source_table( 'terms', 'term_id', 'term', $limit );
},
],
$this->get_additional_indexable_cleanups(),
[
/* These should always be the last ones to be called. */
'clean_orphaned_content_indexable_hierarchy' => function ( $limit ) {
return $this->cleanup_repository->cleanup_orphaned_from_table( 'Indexable_Hierarchy', 'indexable_id', $limit );
},
'clean_orphaned_content_seo_links_indexable_id' => function ( $limit ) {
return $this->cleanup_repository->cleanup_orphaned_from_table( 'SEO_Links', 'indexable_id', $limit );
},
'clean_orphaned_content_seo_links_target_indexable_id' => function ( $limit ) {
return $this->cleanup_repository->cleanup_orphaned_from_table( 'SEO_Links', 'target_indexable_id', $limit );
},
],
$this->get_additional_misc_cleanups()
);
}
/**
* Gets additional tasks from the 'wpseo_cleanup_tasks' filter.
*
* @return Closure[] Associative array of indexable cleanup functions.
*/
private function get_additional_indexable_cleanups() {
/**
* Filter: Adds the possibility to add additional indexable cleanup functions.
*
* @param array $additional_tasks Associative array with unique keys. Value should be a cleanup function that receives a limit.
*/
$additional_tasks = \apply_filters( 'wpseo_cleanup_tasks', [] );
return $this->validate_additional_tasks( $additional_tasks );
}
/**
* Gets additional tasks from the 'wpseo_misc_cleanup_tasks' filter.
*
* @return Closure[] Associative array of indexable cleanup functions.
*/
private function get_additional_misc_cleanups() {
/**
* Filter: Adds the possibility to add additional non-indexable cleanup functions.
*
* @param array $additional_tasks Associative array with unique keys. Value should be a cleanup function that receives a limit.
*/
$additional_tasks = \apply_filters( 'wpseo_misc_cleanup_tasks', [] );
return $this->validate_additional_tasks( $additional_tasks );
}
/**
* Validates the additional tasks.
*
* @param Closure[] $additional_tasks The additional tasks to validate.
*
* @return Closure[] The validated additional tasks.
*/
private function validate_additional_tasks( $additional_tasks ) {
if ( ! \is_array( $additional_tasks ) ) {
return [];
}
foreach ( $additional_tasks as $key => $value ) {
if ( \is_int( $key ) ) {
return [];
}
if ( ( ! \is_object( $value ) ) || ! ( $value instanceof Closure ) ) {
return [];
}
}
return $additional_tasks;
}
/**
* Gets the deletion limit for cleanups.
*
* @return int The limit for the amount of entities to be cleaned.
*/
private function get_limit() {
/**
* Filter: Adds the possibility to limit the number of items that are deleted from the database on cleanup.
*
* @param int $limit Maximum number of indexables to be cleaned up per query.
*/
$limit = \apply_filters( 'wpseo_cron_query_limit_size', 1000 );
if ( ! \is_int( $limit ) ) {
$limit = 1000;
}
return \abs( $limit );
}
/**
* Resets and stops the cleanup integration.
*
* @return void
*/
public function reset_cleanup() {
\delete_option( self::CURRENT_TASK_OPTION );
\wp_unschedule_hook( self::CRON_HOOK );
}
/**
* Starts the cleanup cron job.
*
* @param string $task_name The task name of the next cleanup task to run.
* @param int $schedule_time The time in seconds to wait before running the first cron job. Default is 1 hour.
*
* @return void
*/
public function start_cron_job( $task_name, $schedule_time = 3600 ) {
\update_option( self::CURRENT_TASK_OPTION, $task_name );
\wp_schedule_event(
( \time() + $schedule_time ),
'hourly',
self::CRON_HOOK
);
}
/**
* The callback that is called for the cleanup cron job.
*
* @return void
*/
public function run_cleanup_cron() {
if ( ! $this->indexable_helper->should_index_indexables() ) {
$this->reset_cleanup();
return;
}
$current_task_name = \get_option( self::CURRENT_TASK_OPTION );
if ( $current_task_name === false ) {
$this->reset_cleanup();
return;
}
$limit = $this->get_limit();
$tasks = $this->get_cleanup_tasks();
// The task may have been added by a filter that has been removed, in that case just start over.
if ( ! isset( $tasks[ $current_task_name ] ) ) {
$current_task_name = \key( $tasks );
}
$current_task = \current( $tasks );
while ( $current_task !== false ) {
// Skip the tasks that have already been done.
if ( \key( $tasks ) !== $current_task_name ) {
$current_task = \next( $tasks );
continue;
}
// Call the cleanup callback function that accompanies the current task.
$items_cleaned = $current_task( $limit );
if ( $items_cleaned === false ) {
$this->reset_cleanup();
return;
}
if ( $items_cleaned === 0 ) {
// Check if we are finished with all tasks.
if ( \next( $tasks ) === false ) {
$this->reset_cleanup();
return;
}
// Continue with the next task next time the cron job is run.
\update_option( self::CURRENT_TASK_OPTION, \key( $tasks ) );
return;
}
// There were items deleted for the current task, continue with the same task next cron call.
return;
}
}
}
#Côte d'Ivoire - JusteInfos- Information générale - Page 11
Les résultats du dernier examen à grand tirage, le BAC 2023, ont été communiqués le lundi 24 juillet 2023, sur toute l'étendue du territoire ivoirien.…
C'est le vendredi 3 février 2023 que les autorités ivoiriennes en charge de fixer le nouveau prix bord champ pour la campagne 2023, pour l'achat de la…