воскресенье, 3 января 2010 г.

Создание своей сборки Wordpress. Предустановочная настройка. Install.php

Теперь перейдем к работе с файлом wp-admin\install.php. В нем можно задать все те же настройки по умолчанию, что и в файле wp-admin\includes\schema.php не трогая при этом файл schema.php.

Этот способ более громоздкий, требует применения полного синтаксиса запросов к базе данных, знания PHP и не так нагляден, как при использовании файла schema.php. Во многих случаях код, необходимый для активации того или иного параметра через install.php, может оказаться настолько сложным, что рядовой пользователь не сможет его применить.

Например, эквивалент команды add_option('permalink_structure', '/%category%/%postname%.htm'); в schema.php, реализованный через install.php будет состоять из 9 строк с использованием семи переменных и нескольких вордпрессовских функций.

Использование файла wp-admin\install.php обычно обусловлено незнанием синтаксиса некоторых параметров в файле schema.php, так как документации по этому синтаксису практически нет. Я, например, не нашел в интернете как активировать плагины через файл schema.php, а в немногих найденных сборках предустановочная активация плагинов осуществлялась только через wp-admin\install.php. Так что, возможно, что я первый кто обнаружил, как активировать плагины через schema.php.

Рассмотрим предустановочную активацию параметров через install.php на примере активации плагинов.

Первый способ. Плагины активируются на локальном сервере (например, denwer'e). В таблице options на локальном сервере находим поле с option_name равном active_plugins и копируем оттуда значение сериализованного массива. Для активированных плагинов из примера, приведенного в посте о schema.php, такой сериализованный массив будет выглядеть так:

a:3:{i:0;s:14:"rus-to-lat.php";i:1;s:16:"russian-date.php";i:2;s:34:"wp-contact-form/wp-contactform.php";}

Экранируем в этом сериализованном массиве двойные кавычки косой чертой (вот так - \") и помещаем полученную строку в SQL запрос вида

$wpdb->query("UPDATE ".$table_prefix."options SET option_value = 'вот тут и помещаем сериализованный массив' WHERE option_name = 'active_plugins'");

получаем запрос вида

$wpdb->query("UPDATE ".$table_prefix."options SET option_value = ' a:3:{i:0;s:14:\"rus-to-lat.php\";i:1;s:16:\"russian-date.php\";i:2;s:34:\"wp-contact-form/wp-contactform.php\";}
' WHERE option_name = 'active_plugins'");

Этот запрос размещаем в файле wp-admin\install.php после следующих строк:

$wpdb->show_errors();
$result = wp_install($weblog_title, 'admin', $admin_email, $public);
extract($result, EXTR_SKIP);

Всё, теперь нужные плагины будут активированы непосредственно при установке.

Второй способ. Предварительная активация плагинов в базе данных не требуется и сериализованный массив нам тоже не нужен. Способ сложнее, так как требует знания внутренних функций Wordpress'а – одним запросом к базе данных не обойдешься. В файл wp-admin\install.php после строки

<p><?php printf(__('WordPress has been installed. Were you expecting more steps? Sorry to disappoint.'), ''); ?></p>

вставляется следующий код (плагины взяты из предыдущего примера):

<?php
$current = array("rus-to-lat.php", "russian-date.php", "wp-contact-form/wp-contactform.php");
foreach($current as $plugin) {
do_action('activate_' . $plugin);
}
update_option('active_plugins', $current);
?>

Массив $current в вышеприведенном коде можно инициализировать и в виде:

$current[] = "wp-contact-form/wp-contactform.php";
$current[] = "rus-to-lat.php";
$current[] = "russian-date.php";

на работоспособности кода это не отражается.

Как видим, активация параметров через файл wp-admin\install.php вместо wp-admin\includes\schema.php никаких преимуществ не дает, а только приводит к усложнению кода.

1 комментарий:

  1. Все зависит от плагина.
    Есть плагины, которые при активации выполняют те или иные действия.
    Если их "активировать" через schema.php, то эти действия выполнены не будут...

    ОтветитьУдалить