Добавляем микроблог к своему WordPress блогу

Я отношусь к блоггингу довольно серьезно. Когда я пишу пост, он имеет определенную цель, и обычно является достаточно длинным. Я считаю, что эта стратегия имеет непосредственное отношение к моему успеху; однако в результате этого я лишился пространства, где бы я мог поделиться парой сотен слов. Под пространством я здесь подразумеваю такое место, где бы я мог публиковать контент, являющийся более длинным и более постоянным, нежели записи Facebook, но при этом не таким важным, как записи блога.

microb

Учитывая это, я решил, что мне нужен микроблог. Какое-то время я считал, что вполне смогу обойтись отдельным блогом — возможно, где-нибудь на WordPress.com (далее мы еще поговорим об этом); но чем больше я думал над этим, тем больше я понимал, что мне нужен микроблог на моем персональном сайте. Таким образом, я решил добавить микроблог к своему сайту, используя формат записей «aside» (заметка).

Написание постов каждый день очень важно; однако написание 1500 или более слов каждый день по определенной теме может быть сложным действием даже для закаленных блоггеров.

В этом посте я расскажу о том, как создать микроблог в пределах своего блога при помощи формата записей. Я выбрал для себя формат записей aside; однако вы можете выбрать формат image для создания микроблога из изображений или формат quote – для создания миниатюрного блога цитат.

Я создал свой микроблог – по крайней мере, частично – для того, чтобы узнать больше о произвольных правилах перезаписи. Произвольные правила перезаписи не так просто понять – поэтому микроблог стал моим небольшим проектом, который включил в себя некоторое количество перезаписей. Я хотел бы выразить благодарность Брэди Верчеру из Blazer Six за ту помощь, которую он оказал мне в плане выявления подходящих правил перезаписи.

Пара слов в защиту форматов записей

Форматы записей – не самая популярная возможность в WordPress, однако я являюсь большим их поклонником. Если вы хотите узнать о моих аргументах в их защиту, вы можете прочитать первую часть моей серии статей на Tuts+, посвященных форматам записей.

Однако для реализации микроблога мне нужно было что-то, что работало бы точно так же, как записи; я хотел добиться простого переключения между полной записью и записью микроблога. Кроме того, специальные форматы записей могут быть легко стилизованы при помощи классов.

Другие способы сделать это

Тот путь, которым я решил проблему, не является единственным, и он был частично мотивирован желанием выяснить, как все это реализовать. Есть много других способов создания микроблога, которые достойны внимания. Я изучил разные варианты, а также придумал несколько альтернатив:

Я рассматривал использование произвольного типа записей, однако это выглядело излишеством – к тому же это не самый портативный вариант. Если я отключу плагин, написанный для этой статьи, все записи микроблога превратятся в обычные посты, поскольку они технически такими и являются. Если я отключу плагин, который добавляет произвольный тип записей, посты больше нельзя будет просмотреть. Да, записи останутся в базе данных, однако их уже нельзя просмотреть. Другое преимущество использования форматов записей заключалось в том, что редактор записей обладал всегда теми же самыми возможностями, что было верно не для всех произвольных типов записей.

Другой подход, который я рассматривал, заключался в использовании отдельного блога, однако мне не хотелось создавать и настраивать еще один сайт. Я планировал воспользоваться WordPress.com или Tumblr, однако, в конце концов, я принял решение сохранить все на одном домене, с тем же самым визуальным представлением, а также с возможностью простой навигации по моему старому контенту. Вы могли бы создать микроблог, который будет иметь совершенно иное представление, и который будет расположен на своем собственном домене.

Реализация микроблога

Одна из причин, почему я выбрал такой подход – это мобильность данных. Именно поэтому я и решил создать небольшой плагин, который позволил бы мне сохранить все изменения в том случае, если я переключусь на другую тему. Вы можете также добавить код, приведенный ниже, в файл functions.php, однако я рекомендую использовать плагин. Добавление кода в файл связывает функциональность с представлением вашего сайта (темы) и усложняет отладку.

Если код, представленный ниже, не работает как ожидалось, то в таком случае вам нужно переключиться на другую тему. Некоторые темы добавляют произвольные правила перезаписи, которые могут вмешиваться в этот процесс. Самый лучший способ отладки заключается в том, чтобы переключиться на дефолтную тему – что будет бессмысленным шагом, если вы поместили свой код в functions.php.

Добавление поддержки форматов записей

Тема, которую я использую в настоящий момент, поддерживает несколько форматов записей. Нужный мне формат записей можно подключить при помощи функции, использующей add_theme_support(), которая подцепляется к хуку after_theme_setup. Хитрость состоит в том, что add_theme_support() переписывает существующие параметры для добавляемых возможностей.

Это означает, что add_theme_support( ‘post-formats’, array( ‘aside’ ); удалит существующие форматы записей. Именно поэтому я сцепился с хуком и получил массив поддерживаемых форматов, используя  get_theme_support( ‘post-formats’ ). Затем я добавил aside к нему и заново объявил поддержку формата записей. Вот как это работает:

/**
 * Make sure theme supports aside post format
 */
add_action( 'after_setup_theme', function() {
	$formats = get_theme_support( 'post-formats' );
	$formats = $formats[0];
	if ( ! is_array( $formats ) ) {
		$formats = array( 'aside');
 
	}elseif( ! in_array( 'aside', $formats ) ) {
		$formats[] = 'aside';
	}
 
	add_theme_support( 'post-formats', $formats );
 
}, 50 );

Помните, что get_theme_support( ‘post-formats’) возвратит false, если форматы не поддерживаются; именно по этой причине я добавил дополнительное условие в код.

Создание произвольного URL для микроблога

Форматы записей технически являются таксономиями. Это означает, что они, как и любая другая таксономия, имеют встроенные архивы. Однако мне нужна была другая структура URL для микроблога.

Процесс состоял из двух шагов. На первом шаге мне нужно было добавить правила перезаписи, чтобы создать произвольный URL для микроблога. На втором шаге мне нужно было изменить терм ссылки, чтобы  get_term_link() возвращал новый URL.

Чтобы реализовать произвольную структуру URL, которая мне нужна – структуру  «/small-things», — я использовал два правила перезаписи: первое – для запросов пагинации, а второе – для первой страницы полученных результатов. И то, и другое можно сделать при помощи функции, подцепленной к init.

WordPress rewrite API – огромная тема, которую я не могу раскрыть в пределах пары абзацев. Если вы хотите погрузиться в этот предмет, я советую вам воспользоваться следующим руководством Пиппина Уильямсона.

Rewrite API переводит человеческие ссылки в фактический запрос, который используется в WordPress для создания объекта WP_Query, содержащего необходимые записи. Когда вы добавляете правило перезаписи, вы описываете URL, после чего сообщаете WordPress, с чем связать его в приложении. Обычно он связывается с index.php при помощи нескольких дополнительных GET-переменных, которые используются для создания соответствующего WP_Query.

Наши два правила просты: первое добавляет правило для тех случаев, когда наш URL начинается с «/small-things/page/», после чего идет номер страницы. Когда это происходит, мы задаем аргументы запроса для формата записей aside, а также для пагинации, используя число, которое стоит в URL. Второе правило еще проще; оно работает тогда, когда в URL нет «page»; это правило просто связывает «/small-things/» с первой страницей найденных результатов для формата записей aside.

/**
 * Add rewrite rules for small-things microblog
 */
add_action( 'init', function (){
 
	//pagination rule
	add_rewrite_rule( 'small-things/page/?([0-9]{1,})/?$', 'index.php?post_format=aside&paged=$matches[1]', 'top' );
 
	//first page rule
	add_rewrite_rule( 'small-things/?$', 'index.php?post_format=aside', 'top' );
 
});

Для обоих этих правил верно следующее: чтобы изменить базовый URL, подставьте то, что вы хотите, вместо «small-things». Если вы используете другой формат записей, поставьте его вместо aside.

Важно отметить, что это не будет работать, пока вы не сбросите свои постоянные ссылки. По причинам производительности, WordPress сохраняет активные правила перезаписи в базе данных, вместо того чтобы заново создавать их при каждой загрузке страницы. Обязательно перейдите к странице настроек постоянных ссылок и нажмите «Сохранить», чтобы инициировать пересоздание правил перезаписи.

Когда вы это сделаете, новые правила URL будут работать, однако любые ссылки во фронтэнде и в бэкэнде на формат записей aside будут повреждены. Мы можем решить это при помощи использования фильтра term_link, чтобы изменить URL для формата записей aside:

/**
 * Customize and shorten the asides term link.
 */
add_filter( 'term_link', function( $termlink, $term, $taxonomy ) {
	if ( 'post_format' == $taxonomy && 'Aside' == $term->name ) {
		$termlink = home_url( 'small-things' );
	}
 
	return $termlink;
}, 10, 3 );

Удаление записей микроблога с главной страницы

Мне нужно было, чтобы эти записи не выводились на главной странице блога; вместо этого я хотел, чтобы у них была своя собственная домашняя страница. Все то, что мы делали выше, приводило к созданию нового участка для записей микроблога, однако они по-прежнему выводились на главной странице.

Следующий – и, скорее всего, последний — шаг состоит в удалении этих записей с главной страницы блога. Сделать это можно при помощи pre_get_posts — действия, которое запускается, когда создаются аргументы для WP_Query, однако перед этим они используются для создания объекта WP_Query.

Нам нужно добавить tax_query для исключения записей с форматом aside из основного запроса. Также в коде ниже используются дополнительные логические выражения, которые позволят нам гарантировать то, что мы не повлияем на запросы для формата aside. Опять же, если вы используете другой формат записей, замените его в коде:

/**
 * Remove asides from main blog index
 */
add_action( 'pre_get_posts', function( $query ) {
	if (
		$query->is_home() && $query->is_main_query() &&
		( ! isset( $query->query_vars[ 'post_format' ] ) ||
	    ( isset( $query->query_vars[ 'post_format' ] ) ) &&
	    'post-format-aside' !=  $query->query_vars[ 'post_format' ] )
	) {
		$query->set( 'tax_query',
			array(
				array(
					'taxonomy' => 'post_format',
					'field'    => 'slug',
					'terms'    => array( 'post-format-aside' ),
					'operator' => 'NOT IN',
				)
			)
		);
	}
 
});

Идем дальше

Этого вполне достаточно, чтобы создать микроблог на своем сайте. Вы можете видеть полный код плагина – все 70 строк его – на странице gist. Однако нам осталось рассмотреть здесь еще несколько аспектов.

Вы могли бы добавить некоторые логические выражения в archive.php своей темы или в любой файл, который используется для вывода архивов таксономий. В этом файле вы можете использовать has_post_format( ‘aside’ ) для добавления дополнительной разметки к вашему микроблогу.

Кроме того, как я уже указывал выше, вы можете создать CSS правила для заметок, которые помогут им выделиться среди остального контента. Сайт Мэтта Мулленвега использует произвольную дочернюю тему на основе Twenty Thirteen, которая демонстрирует превосходное использование этой техники для выделения разных форматов. Это прекрасно работает в случае с Мэттом, поскольку он любит публиковать по большей части небольшие заметки, а также ссылки.

Наслаждаемся своим микроблогом

Я мало писал в последнее время. И во многом потому, что у меня не было такого «пространства» для небольших записей. Теперь у меня уже нет оправданий тому, почему я не пишу. Я также потратил время на то, чтобы понять, как это работает, а также многому научился из данного процесса.

Интересным мне кажется то, что я рассматриваю WordPress скорее как фреймворк для создания приложений, а также как платформу электронной коммерции. Это произошло из-за моей работы. Иногда я забываю, что WordPress – это еще и хобби, удобный и гибкий инструмент для блоггинга. Я рад, что нашел для себя новый подход, связанный с блогом, и надеюсь, что вы воспользуетесь этой идеей и измените ее под себя, чтобы она отвечала в полной мере вашим потребностям.

Источник: torquemag.io

Блог про WordPress
Комментарии: 15
  1. Волшебник

    Что-то я не понял смысла всей этой затеи. )

    1. Дмитрий (автор)

      Смысл в том, чтобы создать микроблог, основанный на отдельном формате записи, который имел бы свой URL. Просто микроблог для небольших заметок, которые бы не забивали собой ленту основного блога.

  2. Роман

    А есть пример какой-то, что из всего этого получилось?

    1. Дмитрий (автор)

      Да, примера тут явно не хватает, но, увы, автор его не предоставил. Только код всего плагина целиком.

  3. Андрей

    Мне кажется, это довольно сложно. Может проще использовать для микроблога wordpress.com или twitter? Лучше бы конечно пример.

    1. Дмитрий (автор)

      Возможно, что так, но некоторым хочется вести все это в одном блоге.

  4. Волшебник

    Можно просто рубрику создать и в ней писать.

    1. Дмитрий (автор)

      Да, но хочется еще и стилизовать их как-то по особому)

  5. Волшебник

    Желания, делающие жизнь сложнее — от лукавого)

  6. Роман

    Так-то работа с форматами записей давно известна, наиболее яркий пример — сайт самого Мэтта Муленвега, он там разные форматы использует очень активно. Просто интересно, как будет выглядеть отдельная лента записей формата aside? По ходу надо самому ставить плагин из статьи и смотреть, что получится))

    1. Дмитрий (автор)

      Будет что-то по типу Twitter’а на своем сайте.

  7. Волшебник

    Пишем в рубрику. Ставим какой-нибудь плагин, который выводит записи определенной рубрики в виджет сайдбара и плагин, который их скрывает в основной ленте.

  8. писарь

    Долго голову ломал, как это сделать. Главная проблема была в простоте публикации. Нужно было миновать придумывание заголовка. В итоге я отправляю сообщения по почте, а заголовок выставляется автоматически — дата публикации.

  9. Раута

    Круто! Почему бы и нет. Попробую на своем блоге. Спасибо

  10. Emin

    Всегда нравился WordPress очень простая и понятная админка, это и есть его реклама и успех

Добавить комментарий для Дмитрий Отменить ответ

Получать новые комментарии по электронной почте.