Учитывая приведенный ниже код, как мне учесть префикс таблицы, который может меняться от установки к установке? Есть ли лучший способ написать это, чем SQL-запрос? Есть ли переменная, которую я пропустил, которая предоставляет префикс таблицы для таких случаев?
// setting posts with current date or older to draft
if (!wp_next_scheduled('sfn_expire_hook')){
wp_schedule_event( time(), 'hourly', 'sfn_expire_hook');
}
add_action( 'sfn_expire_hook', 'sfn_show_expire');
function sfn_show_expire(){
global $wpdb;
$server_time = date('mdy');
$result = $wpdb->get_results("SELECT * FROM GrandDn4wP_posts WHERE post_type = 'show' AND post_status = 'publish'");
if( !empty($result)) foreach ($result as $a){
$show_time = get_the_time('mdy', $a->ID);
if ( $server_time > $show_time ){
$my_post = array();
$my_post['ID'] = $a->ID;
$my_post['post_status'] = 'draft';
wp_update_post( $my_post );
}
} // end foreach
}
Если кто-то ищет переменную префикса таблицы, вот несколько способов получить к ней доступ: (i)
$wpdb->prefix
в пределах областиglobal $wpdb
видимости и (ii) с помощью$table_prefix
переменной.почему get_posts предпочтительнее?
В этом случае это рекомендуемый способ извлечения сообщений из базы данных, и он более надежен в будущем.
абстрагирует вызовы базы данных, так что вы никогда не вызываете запрос напрямую. Если кто-то попытается использовать подключаемый модуль на сайте, использующем базу данных, отличную от MySQL, а вы используете прямые запросы, ваш подключаемый модуль может выйти из строя. Я видел некоторые сайты, которые используют MS SQL, некоторые, которые используют плоские базы данных (текстовые файлы) и т. д.
get_posts()
, могут использовать все это, если у вас настроен правильный уровень абстракции.Вы можете переписать код следующим образом:
но лучше написать это с помощью функции get_posts: