Files
profile/inc/action-scheduler-functions.php

166 lines
5.3 KiB
PHP
Raw Permalink Normal View History

2026-03-09 20:51:08 +03:00
<?php
// action-scheduler-functions.php (загружается только для воркера)
add_action( 'async_post_processing_trigger', 'handle_async_post_processing', 10, 1 );
function handle_async_post_processing( $post_id ) {
// Сохраняем оригинальное состояние кеширования
//$original_cache_addition = wp_suspend_cache_addition( true );
//$original_cache_invalidation = wp_suspend_cache_invalidation( true );
try {
// Очищаем кеш поста
//clean_post_cache( $post_id );
// Очищаем кеш таксономий
/** $taxonomies = get_object_taxonomies( get_post_type( $post_id ) );
foreach ( $taxonomies as $taxonomy ) {
wp_cache_delete( 'all_ids', $taxonomy );
wp_cache_delete( 'get', $taxonomy );
delete_option( "{$taxonomy}_children" );
wp_cache_delete( 'last_changed', 'terms' );
}*/
// Получаем свежие данные
$post = get_post( $post_id );
log_scheduler_activity( 'текущий пост:', $post_id );
if ( ! $post || 'publish' !== $post->post_status ) {
return false;
}
$post_url = get_permalink( $post_id );
$post_title = $post->post_title;
$delay = 0;
//google news
as_schedule_single_action(
time() + $delay,
'process_sitemap_submission',
[],
'sitemap_generation'
);
//IndexNow
as_schedule_single_action(
time() + 5,
'process_indexnow_submission',
[ $post_id, $post_url, $post_title ],
'post_publish_processing'
);
return true;
} catch ( Exception $e ) {
// Логируем ошибку
error_log( "failed for post {$post_id}: " . $e->getMessage() );
log_scheduler_activity( "failed for post {$post_id}: " . $e->getMessage() );
// Пробрасываем исключение для перевода задачи в Failed
throw $e;
}
}
function log_scheduler_activity( $message, $post_id = null ) {
$log_file = ABSPATH . 'scheduler.log';
$log_file = '/var/www/profile/html/scheduler.log';
$log_entry = sprintf(
"[%s] %s%s\n",
current_time( 'Y-m-d H:i:s' ),
$post_id ? "Post {$post_id}: " : "",
$message
);
file_put_contents( $log_file, $log_entry, FILE_APPEND | LOCK_EX );
}
// generation google news php82 /usr/bin/wp eval-file test-theme-load.php --path=/var/www/profile/html
add_action('process_sitemap_submission', 'handle_sitemap_submission');
function handle_sitemap_submission() {
$generator = new AK_Sitemap_Generator();
$result = $generator->generate_news_sitemap([ 'profile_article', 'anew', 'yellow' ]);
if ($result) {
error_log('News Sitemap generated successfully');
} else {
error_log('News Sitemap generation failed');
}
return $result;
}
//index now
function process_indexnow_submission( $post_id, $post_url, $post_title ) {
try {
// Проверяем флаг отправки
if ( get_post_meta( $post_id, '_indexnow_sent', true ) ) {
return;
}
// Ваша логика отправки в IndexNow
$api_key = 'b1a2g3d4i8f6g7h8i9juyg0k11l12';
//$domain = parse_url( home_url(), PHP_URL_HOST );
$domain = 'https://profile.ru';
$body = array(
'host' => $domain,
'key' => $api_key,
// 'keyLocation' => esc_url( home_url( '/' . $api_key . '.txt' ) ), // ❌ НЕ НУЖНО
'urlList' => array( $post_url )
);
$response = wp_remote_post( 'https://api.indexnow.org/IndexNow', array(
'body' => wp_json_encode( $body ),
'headers' => array( 'Content-Type' => 'application/json; charset=utf-8' ),
'timeout' => 30,
));
// ПРАВИЛЬНАЯ ПРОВЕРКА ОТВЕТА
if ( is_wp_error( $response ) ) {
log_scheduler_activity( "IndexNow WP Error for post {$post_id}: " . $response->get_error_message(), $post_id );
return false;
}
$response_code = wp_remote_retrieve_response_code( $response );
$response_body = wp_remote_retrieve_body( $response );
// IndexNow возвращает 200/201 при успехе
if ( in_array( $response_code, array( 200, 201, 202 ) ) ) {
// Помечаем как успешно отправленный
update_post_meta( $post_id, '_indexnow_sent', current_time( 'mysql' ) );
log_scheduler_activity( "IndexNow success {$post_url}", $post_id );
return true;
} else {
log_scheduler_activity( "IndexNow failed {$post_url}. Status: {$response_code} | Response: {$response_body}", $post_id );
return false;
}
} catch ( Exception $e ) {
// Логируем ошибку
error_log( "IndexNow failed for post {$post_id}: " . $e->getMessage() );
echo $e->getMessage();
// Пробрасываем исключение для перевода задачи в Failed
throw $e;
}
}