WordPress и комментарии в vk

К сожалению всё.. Пришлось отключить, т.к. используемый с 2015г плагин сломался, а на замену ничего не подобрал нормального.

WordPress грузит ресурсы по http вместо https

После переноса одного из сайтов на wordpress с одного сервера на другой, столкнулся с проблемой, что все ресурсы (css, js и т.п.) грузятся по протоколу http, хотя основной сайт грузится по https (загрузка http вместо https). Изменение и проверка всего и вся в БД результата не дало. Помог рецепт добавить в wp-config.php строчку:

$_SERVER['HTTPS'] = 'on';

Заработало. Что такое было, не понятно.. Точнее понятно что это настройки apache, но вот какие, так обнаружить и не удалось.

P.S. Кроме того, естественно была проведена работа по замене всех ссылок вида http на https внутри БД wordpress. Однако это не помогло в моём случае.

Перенос работающего сайта WordPress с Mysql на PostgreeSQL

Задача: перенести рабочий, наполненный постами, сайт на движке WordPress с БД MySQL на PostgreeSQL

Инструментарий:

1) pgloader — утилита для переноса данных из баз данных MySQL в PostgreeSQL

Особенности о которые спотыкался:

  • для успешного переноса необходимо чтобы пользователь в терминале под которым осуществляется перенос имел максимальные права в БД и имел доступ «без пароля» для входа в консоль pgsql
  • при переносе создается схема с именем БД, а не заливается по умолчанию в схему public. Что в принципе для нашей ситуации даже будет плюсом.
  • Перед переносом, БД уже должна быть создана в PostgreeSQL

Синтаксис:

pgloader mysql://login:password@host/db_name pgsql:///db_name

2) Плагин PG4WP который на «лету» исправляет запросы к MySQL на PostgreeSQL

Особенности:

  • работает только при «чистой» установке. Т.е. WordPress должен быть штатно проинсталлирован с нуля
  • Инсталляция корректно работает только до версии WordPress 5.9
  • Плагин заброшен, последнее обновление — 3 года назад

Итак, общий алгоритм переноса рабочего WordPress получается такой:

  1. Переносим при помощи pgloader БД в отдельную схему
  2. Заново устанавливаем WordPress 5.9 с плагином PG4WP
  3. Удаляем из схемы public wp_posts (это если только статьи переносим) и переносим её из схемы созданной pgloader в public
  4. Пробуем обновить штатно WordPress

Точно понадобится:

-- перенос таблицы из отдной схемы в другую
ALTER TABLE wp_base.wp_users
SET SCHEMA public 

Удаление всех таблиц в схеме:

-- удаляем таблицы
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 $$;

Поменять схему всех таблиц:

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 $$;

В принципе пока вполне рабочая схема

Пишем плагин для WordPress

Для того чтобы не изобретать велосипеды, необходимо с генерировать шаблоны файлов плагина. Например при помощи этого сервиса. В моём случае плагин называется ssk_read, поэтому далее везде фигурирует в названиях файлов он.

Получится структура папок вида:

Необходимо поместить все файлы в папку /wp_content/plugins..и собственно на этом моменте плагин уже будет доступен в админке для ативации.

Далее попробуем нарисовать страницу настроек в панели администрирования. Для этого добавим в /admin/class-ssk_read-admin.php в функцию конструкта класса хук добавления пункта меню:

add_action( 'admin_menu', 'register_my_config_page');

И далее в основном теле плагина skk_read.php добавим функцию register_my_config_page, которая непосредственно регистрирует этот пункт меню к выводу на экран:

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 функционал вывода сохраненных настроек:

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 в функцию конструкта класса хук инициализации настроек:

add_action( 'admin_init', 'ssk_read_fields');

И далее в основном классе ssk_read.php добавим функции регистрации полей и их вывода:

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.'" />';
}

Получилось функционирующее сохранение:

Однако не хватает уведомления об успешном сохранении. Добавим хук:

add_action( 'admin_notices', 'ssk_custom_notice' );

И вывод сообщения:

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>';
    }
}

WordPress: перебор записей с сортировкой по дате

Ну например это можно реализовать вот так:




1 2 3