WordPress и комментарии в vk
К сожалению всё.. Пришлось отключить, т.к. используемый с 2015г плагин сломался, а на замену ничего не подобрал нормального.
Жизнь замечательных грибов
К сожалению всё.. Пришлось отключить, т.к. используемый с 2015г плагин сломался, а на замену ничего не подобрал нормального.
После переноса одного из сайтов на wordpress с одного сервера на другой, столкнулся с проблемой, что все ресурсы (css, js и т.п.) грузятся по протоколу http, хотя основной сайт грузится по https (загрузка http вместо https). Изменение и проверка всего и вся в БД результата не дало. Помог рецепт добавить в wp-config.php строчку:
1 |
$_SERVER['HTTPS'] = 'on'; |
Заработало. Что такое было, не понятно.. Точнее понятно что это настройки apache, но вот какие, так обнаружить и не удалось.
P.S. Кроме того, естественно была проведена работа по замене всех ссылок вида http на https внутри БД wordpress. Однако это не помогло в моём случае.
Задача: перенести рабочий, наполненный постами, сайт на движке WordPress с БД MySQL на PostgreeSQL
Инструментарий:
1) pgloader — утилита для переноса данных из баз данных MySQL в PostgreeSQL
Особенности о которые спотыкался:
Синтаксис:
1 |
pgloader mysql://login:password@host/db_name pgsql:///db_name |
2) Плагин PG4WP который на «лету» исправляет запросы к MySQL на PostgreeSQL
Особенности:
Итак, общий алгоритм переноса рабочего WordPress получается такой:
Точно понадобится:
1 2 3 |
-- перенос таблицы из отдной схемы в другую ALTER TABLE wp_base.wp_users SET SCHEMA public |
Удаление всех таблиц в схеме:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
-- удаляем таблицы DO $$ DECLARE r RECORD; BEGIN FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = current_schema()) LOOP EXECUTE 'DROP TABLE ' || quote_ident(r.tablename) || ' CASCADE'; END LOOP; END $$; -- удаляем последовательности DO $$ DECLARE r RECORD; BEGIN FOR r IN (SELECT relname FROM pg_class where relkind = 'S') LOOP EXECUTE 'DROP SEQUENCE IF EXISTS ' || quote_ident(r.relname) || ' CASCADE'; END LOOP; END $$; |
Поменять схему всех таблиц:
1 2 3 4 5 6 7 |
DO $$ DECLARE r RECORD; BEGIN FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = 'старая_схема') LOOP EXECUTE 'ALTER TABLE старая_схема.' || quote_ident(r.tablename) || ' SET SCHEMA новая_схема '; END LOOP; END $$; |
В принципе пока вполне рабочая схема
Для того чтобы не изобретать велосипеды, необходимо с генерировать шаблоны файлов плагина. Например при помощи этого сервиса. В моём случае плагин называется ssk_read, поэтому далее везде фигурирует в названиях файлов он.
Получится структура папок вида:
Необходимо поместить все файлы в папку /wp_content/plugins..и собственно на этом моменте плагин уже будет доступен в админке для ативации.
Далее попробуем нарисовать страницу настроек в панели администрирования. Для этого добавим в /admin/class-ssk_read-admin.php в функцию конструкта класса хук добавления пункта меню:
1 2 |
add_action( 'admin_menu', 'register_my_config_page'); |
И далее в основном теле плагина skk_read.php добавим функцию register_my_config_page, которая непосредственно регистрирует этот пункт меню к выводу на экран:
1 2 3 4 5 6 7 8 |
function register_my_config_page(){ add_menu_page( 'SSK_Read', 'SSK_Read', 'edit_others_posts','ssk_read', 'DrawPage', plugins_url( 'ssk_read/images/logo.png' ), 6 ); } function DrawPage(){ ?> <h1 class="wp-heading-inline">Основные настройки</h1> <?php }; |
После этого в меню админки появится новый пункт меню, с выводом пустой страницы. Добавим в функцию DrawPage функционал вывода сохраненных настроек:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function DrawPage(){ ?> <h1 class="wp-heading-inline">Основные настройки</h1> <form method="post" action="options.php"> <?php settings_fields('ssk_read_settings'); do_settings_sections( 'ssk_read'); submit_button(); ?> </form> <?php }; |
На этом этапе пока появится только кнопка «сохранить изменения», потому как мы еще не указали ядру, какие именно настройки мы хотим хранить. Для этого добавим в /admin/class-ssk_read-admin.php в функцию конструкта класса хук инициализации настроек:
1 |
add_action( 'admin_init', 'ssk_read_fields'); |
И далее в основном классе ssk_read.php добавим функции регистрации полей и их вывода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
function ssk_read_fields(){ register_setting('ssk_read_settings','api_doc_url','string'); register_setting('ssk_read_settings','api_doc_login','string'); register_setting('ssk_read_settings','api_doc_password','string'); add_settings_section( 'ssk_settings_section_id', 'Соединение с 1С Документооборот','', 'ssk_read' ); add_settings_field('api_doc_url','URL вызова API','DrawApiTxtField','ssk_read','ssk_settings_section_id',array('name' => 'api_doc_url')); add_settings_field('api_doc_login','Логин','DrawApiTxtField','ssk_read','ssk_settings_section_id',array('name' => 'api_doc_login')); add_settings_field('api_doc_password','Пароль','DrawApiPasswordField','ssk_read','ssk_settings_section_id',array('name' => 'api_doc_password')); } function DrawApiTxtField($args){ $value = get_option( $args[ 'name' ] ); echo '<input type="text" id="'.$args[ 'name' ].'" name="'.$args[ 'name' ].'" value="'.$value.'" />'; } function DrawApiPasswordField($args){ $value = get_option( $args[ 'name' ] ); echo '<input type="password" id="'.$args[ 'name' ].'" name="'.$args[ 'name' ].'" value="'.$value.'" />'; } |
Получилось функционирующее сохранение:
Однако не хватает уведомления об успешном сохранении. Добавим хук:
1 |
add_action( 'admin_notices', 'ssk_custom_notice' ); |
И вывод сообщения:
1 2 3 4 5 6 7 8 9 10 11 |
function ssk_custom_notice(){ if ( isset( $_GET[ 'page' ] ) && 'ssk_read' == $_GET[ 'page' ] && isset( $_GET[ 'settings-updated' ] ) && true == $_GET[ 'settings-updated' ] ) { echo '<div class="notice notice-success is-dismissible"><p>Настройки сохранены!</p></div>'; } } |
Ну например это можно реализовать вот так:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $params = array( 'post_type' => array('all', 'news'), 'orderby' => 'date', 'order' => 'ACS', 'paged' => $paged ); $news_var = query_posts($params); $new_block = ''; foreach ($news_var as $new) { setup_postdata($new); |