AGorbunoff
@AGorbunoff
Умные сайты на WordPress

Как в $post_id передать нужную запись для события cron и обновления полей update_post_meta по расписанию?

Добрый день. Как получить ID поста и обновить записи update_post_meta по расписанию?

// регистрируем интервал 24 часа
add_filter( 'cron_schedules', 'cron_24' );
function cron_24( $schedules ) {
	$n = rand(0,55);
	$schedules['rand_24'] = array(
		'interval' => 60 * $n * 24,
		'display' => 'раз в сутки'
	);
	return $schedules;
}

// регистрируем событие 24_event
add_action( 'wp', 'to_cron_24' );
function to_cron_24() {
	if ( ! wp_next_scheduled( '24_event' ) ) {
		wp_schedule_event( time(), 'rand_24', '24_event');
	}
}

// добавляем функцию к хуку события
add_action( '24_event', 'updated_meta', 1 );

function updated_meta() {

    // какая-то задача, например ключевые слова
    $keywords = 'ключевые фразы для серии постов';

    update_post_meta( $post_id, 'allkeywords', $keywords );
}


Когда вписываю конкретный id записи работает, а когда параметром: $post_id не работает.

function updated_meta() {

    // какая-то задача, например ключевые слова
    $keywords = 'ключевые фразы для серии постов';

    update_post_meta( 34, 'allkeywords', $keywords ); // только так работает

    update_post_meta( $post_id, 'allkeywords', $keywords ); // так нет
    update_post_meta( $post->ID, 'allkeywords', $keywords ); // так нет
    update_post_meta( get_the_ID(), 'allkeywords', $keywords ); // так нет

add_action( '24_event', 'updated_meta', 1 );


$post = get_post(); // пробовал
global $post; // пробовал
global $wpdb; // пробовал

И еще. Для обычного обновления полей через save_post в функции мы пишем параметром function updated_meta ( $post_id ) но для события так не работает.

Вероятно ID не определяется с пустыми скобками function updated_meta ( ) то есть функция не понимает для какого конкретно поста (записи) сработать.


Как получить ID поста и обновить произвольное поле 'allkeywords' для всех записей сразу?
  • Вопрос задан
  • 40 просмотров
Решения вопроса 1
nokimaro
@nokimaro
внутри function updated_meta() написать код для получения нужных $post_id из БД?

гугл подсказывает что делается это через get_posts()
$args = array(
  'numberposts' => 10,
  //'post_type'   => 'book'
);
 
$latest_posts = get_posts( $args );
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AGorbunoff
@AGorbunoff Автор вопроса
Умные сайты на WordPress
Итоговый сниппет, который обновляет произвольные поля текущей записи по событию cron без необходимости жать кнопку "обновить".

Спасибо nokimaro и yarovikov за поддержку!


Это позволяет вносить любые изменения в запись по расписанию.

// регистрируем интервал 24 часа
add_filter( 'cron_schedules', 'cron_24' );
function cron_24( $schedules ) {
  $n = rand(0,55);
  $schedules['rand_24'] = array(
    'interval' => 60 *  $n  * 24,
    'display' => 'раз в сутки'
  );
  return $schedules;
}

// регистрируем событие 24_event
add_action( 'wp', 'to_cron_24' );
function to_cron_24() {
  if ( ! wp_next_scheduled( '24_event' ) ) {
    wp_schedule_event( time(), 'rand_24', '24_event');
  }
}

// добавляем функцию к хуку события
add_action( '24_event', 'updated_meta' );
function updated_meta() {

   // получаем массив записей post
    global $post;

    $args = array(
     'post_type' => 'post'
      );

    $posts = get_posts( $args );

    foreach( $posts as $post ){
      setup_postdata($post);  // устанавливаем данные	
    
      // какая-то задача внутри цикла, например ключевые фразы
      $keywords = 'ключевые фразы для серии постов';
    
      $post_id = get_the_ID(); // получаем ID текущего поста в цикле
    
      //  обновляем произвольное поле раз в сутки в случайное время
      update_post_meta( $post_id, 'allkeywords', $keywords );    

  }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы