До WordPress публикация в интернете требовала: написать HTML вручную, нанять разработчика, или разобраться с Movable Type - который требовал Perl, chmod на дюжину директорий и чтения документации на английском.
WordPress 0.7 вышел 27 мая 2003. Мэтт Мулленвег взял заброшенный PHP-движок b2/cafelog и переписал его. 2500 строк PHP. Установка: распаковать архив, загрузить по FTP, создать базу MySQL, открыть install.php в браузере. Пять минут.
В Казахстане в 2003 году интернет был у небольшого процента населения - в основном Алматы и Астана. Но те, кто был онлайн, начали ставить WordPress немедленно. Первые казахстанские блоги появились именно на этой платформе.
The Loop - сердце WordPress
<?php
// WordPress Loop 2003 - этот код копировали все
<?php query_posts('showposts=10'); ?>
<?php while (have_posts()) : the_post(); ?>
<div class="post">
<h2>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</h2>
<div class="meta">
Опубликовано <?php the_time('d.m.Y'); ?>
| <?php the_author(); ?>
</div>
<div class="content">
<?php the_content('Читать далее »'); ?>
</div>
<div class="tags">
<?php the_tags('Теги: ', ', '); ?>
</div>
</div>
<?php endwhile; ?>
<?php // Пагинация ?>
<div class="navigation">
<?php previous_posts_link('« Новее'); ?>
<?php next_posts_link('Старше »'); ?>
</div>
Конструкция while (have_posts()) : the_post() стала стандартом. Казахстанские разработчики учили WordPress именно по этому паттерну.
Схема базы данных WordPress 0.7
-- MySQL 3.23 / 4.0 - минималистичная схема
-- Узнаваема в WordPress до сегодня
CREATE TABLE wp_posts (
ID bigint(20) unsigned NOT NULL auto_increment,
post_author bigint(20) unsigned NOT NULL default '0',
post_date datetime NOT NULL default '0000-00-00 00:00:00',
post_content longtext NOT NULL,
post_title text NOT NULL,
post_status varchar(10) NOT NULL default 'publish',
post_name varchar(200) NOT NULL default '',
PRIMARY KEY (ID),
KEY post_name (post_name)
) TYPE=MyISAM;
-- wp_options: key-value хранилище конфигурации
CREATE TABLE wp_options (
option_id bigint(20) unsigned NOT NULL auto_increment,
option_name varchar(64) NOT NULL default '',
option_value longtext NOT NULL,
autoload varchar(20) NOT NULL default 'yes',
PRIMARY KEY (option_id),
UNIQUE KEY option_name (option_name)
) TYPE=MyISAM;
-- Вся гибкость WordPress - через wp_options.
-- Новый параметр = новая строка. Без миграций схемы.
-- В 2003 году это было правильным решением.
Кастомизация шаблонов без плагинов
<?php
// sidebar.php - 2003 год
// Плагинов ещё нет (появятся в WordPress 1.2, май 2004)
// Кастомизация = прямое редактирование шаблонов
global $wpdb;
// Последние записи
$recent = $wpdb->get_results(
"SELECT ID, post_title, post_date
FROM $wpdb->posts
WHERE post_status = 'publish'
ORDER BY post_date DESC
LIMIT 5"
);
?>
<div id="sidebar">
<h2>Последние записи</h2>
<ul>
<?php foreach ($recent as $post): ?>
<li>
<a href="<?php echo get_permalink($post->ID); ?>">
<?php echo htmlspecialchars($post->post_title); ?>
</a>
<small><?php echo date('d.m.Y', strtotime($post->post_date)); ?></small>
</li>
<?php endforeach; ?>
</ul>
<h2>Архив</h2>
<ul><?php wp_get_archives('type=monthly'); ?></ul>
<?php // Ссылки / Blogroll - встроено в ядро WP 0.7 ?>
<h2>Ссылки</h2>
<ul><?php get_links(-1, '<li>', '</li>', ' '); ?></ul>
</div>
WordPress в Казнете: 2003-2006
Первые казахстанские WordPress-блоги появились в 2003-2004. Журналисты, студенты, технари из Алматы и Астаны. Блог позволял публиковать без технических знаний - достаточно было поставить WordPress на хостинг.
К 2005 году начала формироваться казахстанская блогосфера. Люди ссылались друг на друга, формировали сообщества вокруг тем. Это был первый казахстанский user-generated content в масштабе.
К 2007 году WordPress установили тысячи казахстанских пользователей. Параллельно появилась ЖЖ-аудитория (LiveJournal) - но WordPress давал контроль над своим сайтом, своим доменом.
Выбор 2003 года - пять минут на установку вместо часа - определил что платформа победила. К 2023 году WordPress работает на 43% всех сайтов в мире. Всё это из 2500 строк PHP опубликованных на SourceForge.