Wordpress api в cron задании.

Пришлось делать крон задание с использованием api Wordpress. Есть у него константа SHORTINIT. Позволяет включить из WP только api по работе с БД.

Выглядит это так:

<?php
// указываем, что нам нужен минимум от WP
define('SHORTINIT', true);
require_once( __DIR__ . '/wp-load.php' );

После этих строк нам доступна $wpdb.

Для использования других функций надо посмотреть wp-settings.php и подключать файлы что нужны ниже верхних строк. Файлы для подключения вида require( ABSPATH . WPINC . '/formatting.php' );. В этом же файле ниже идёт ряд инициализирующих функций. Используются опять же таки по необходимости.

Но самое интересное это то, что cron задание выполненное и отлаженное локально, при правильном переносе самого сайта на сервер, может просто не работать. Оказывается хостер при команде php -f /route-to-file/cron.php может спокойно запускать версии php 5.3.19(в моём случае) и ниже. Что приводит к потере использования кодировки utf8mb4. И поэтому все русские буквы превращаются в знак вопроса. Это пол беды. Из-за этого может "сыпаться" функция maybe_unserialize(). А это уже приводит к многочисленным ошибкам(не получаем опции в частности). Хуже то, что для старой php нужно указать в конфиге define('DB_CHARSET', 'utf8');, но нам ведь для сайта надо сохранять utf8mb4, тем более, что с большой долей вероятности кодировка всех таблиц идёт в ней. В общем не очень приятно менять кодировку. Приходится городить костыль, проверяющий поддержку кодировки utf8mb4 раньше, чем вызываем wp-load.php, чтобы объявить при необходимости define('DB_CHARSET', 'utf8');. Ещё один вариант решения на скорую руку это писать в кроне lynx dump путь-к-файлу-крона , или использовать вместо lynx wget. Но я думаю это более прожорливый метод. У меня на хостинге был ещё один способ указать версию php для крон-файла: например седьмая верси php вызывалась как php70 -f /route-to-file/cron.php. В ней тоже будет уже работать utf8mb4.

Заметили ошибку, можете подсказать еще что-то? - Обращаемся сюда

Примеры работ

Информация