FAQ по WordPress

Ответы на часто задаваемые вопросы по WordPress.

как написать свой плагин

Ссылки:

1. Кодекс ВордПресса: http://codex.wordpress.org/Написание_плагина рус., в анг. варианте: Writing a plugin, еще перевод этой статьи: Статья «Как написать плагин для WordPress» (Writing a Plugin) — перевод
2. Выпуск 23. Базовый класс для WordPress-плагина рус., автор maxsite
4. Функции WordPress eng, источник: maxsite
5. WordPress 2.x Filter List for Plugin and Theme Developers
6. WordPress 2.x Hooks for Action – Comprehensive List for Plugin and Theme Developers

WordPress — стандарты кодирования плагинов (русский яз., статья на Хабре)

плагин wordpress plugin framework

WordPress How To: Easily make an admin panel for a plugin

Делаем плагины для WordPress. Часть 1
Делаем плагины для WordPress. Часть 2

Пишем wordpress плагин. Работа с БД.

Создание таблиц в плагине для WordPress перевод статьи кодекса Creating Tables with Plugins

Принцип создания плагина на примере (код с комментариями), от Ю.Б. http://mywordpress.ru/support/viewtopic.php?pid=42002#p42002

У кого что есть еще, добавляйте

Чем отличается the_excerpt от the_content(“Далее”)

Для вывода аннотаций постов на странице рубрики или на главной странице пригодны два тега: the_exceprt() и the_content("далее").
the_excerpt() выводит либо то, что стоит в поле "цитата", либо первые 55 слов записи – причем весь html им отвергается, то есть ссылки и картинки исчезают.
the_content() выводит запись целиком, а вот the_content("читать дальше") /тут важно само наличие аргумента в скобках, а его содержание делайте по своему усмотрению/ запись до пометки <!–more–>, которую надо не забыть поставить в момент написания.
Можно сделать и так, чтобы ссылка на дальнейшее содержание записи выглядела как "Читать дальше запись под названием таким-то" – для этого пишем the_content("Читать дальше запись под названием " . the_title(”, ”, false));

установка wordpress (инструкця)

http://www.phpbb-test.tosay.ru/index.php?option=com_content&task=view&id=11&Itemid=10
вот собственно набросал инструкцию по установке для общего пользования,
принимается конструктивная критика
и пожелания на новым статьям

Начальная страница

Я начал с темы Pool от Borja Fernandez. 2 меню: горизонтальное и левое вертикальное. Горизонтальное выводит статические страницы, вертикальное записи, которые разделены на рубрики. Одна рубрика – "новости", вторая – "страницы из журнала".
Я бы хотел, чтобы при заходе на сайт выводились записи только из рубрики новости (id=1), а выводятся записи из всех рубрик. Если я вставляю код <?php query_post(‘cat=1’); ?> в idex.php темы получаю нужный вывод, но перестает работать ссылка из рубрики "страницы из журнала". Как сделать желаемый вывод?

Внешние ссылки через редирект. Как?

Столкнулся с проблемой – как делать внешние ссылки через внутренний редирект? То есть, чтобы она не была прямая. Есть готовые решения? Или может быть плагин? Или WP вообще так не может? Чтобы на главной была ссылка типа: мой_сайт.ру/index.php?p=redir&… и так далее

Прежде чем создать новую тему…

Этот форум мы используем только для готовых решений. Не нужно здесь задавать вопросы – сделайте это в соседнем форуме «WordPress».

ps Все внетемные темы будут удаляться без возможности восстановления. При повторах – автору вечный бан.

Оформление текстов и картинок с помощью HTML

К сожалению полный курс HTML потянет на отдельный сайт :), поэтому я просто приведу ссылки на два выпуска моей рассылки, где я привожу примеры работы с HTML. Рассчитаны они на новичков.

Основы HTML. Оформление текстов
Оформление текстов с помощью HTML

Оформление изображений

Создание анонса (more и noteaser)

Для того, чтобы разбить запись на две части, где первая будет отображаться только на главной станице (анонс, цитата), в тексте достаточно указать

<!--more-->

На главной странице будет отображен текст до этой конструкции.

Если вы хотите получить полный аналог поля «Цитата» (в админ-панели), то нужно указать:

<!--more-->
<!--noteaser-->

В этом случае на главной странице будет отображен текст до этой конструкции, а на странице записи его уже не будет.

http://maxsite.org/delenie-stranits-v-wordpresse

Деление страниц в WordPress’е

Для того, чтобы разбить запись на несколько страниц, в нужном месте текста достаточно указать:

<!--nextpage-->

Если после указания этого кода, WordPress не выводит ссылки на следующие части, то проверьте в шаблоне (index.php, single.php или page.php) наличие функции wp_link_pages(). Её нужно указать после the_content().

http://trampampam.ru/blog/other-pages/
http://maxsite.org/delenie-stranits-v-wordpresse

Как добавить счетчик, рекламу (или любой другой html-код)

Для этого вы можете использовать плагин «Ушки»: http://maxsite.org/novyiy-plagin-ushki

В нужном месте, например в footer.php или sidebar.php, нужно прописать код:

<?php 
if (function_exists('show_ushka')) show_ushka('counters');
?>

А в настройках создать ушку «counters» и добавить в неё свой html-код.

Вывод записей определенной рубрики в любом месте

Иногда нужно вывести записи вне основного цикла theeLoop. Обычно это делается с помощью query_posts. Проблема в том, что WordPress использует глобальные переменные, и после использования этой функции, условия query_posts станут глобальными.

Чтобы этого избежать, нужно использовать функцию get_posts. Например, мы хотим вывести в сайдбаре список последних записей в рубрике новости (id=1):

<h2 class="pages_search">Новости</h2>
<ul class="is_kat">
<?php
$posts_new = get_posts('category=1&numberposts=3');
foreach ($posts_new as $post_new) :
    echo '<li class="news_item"><a href="'; 
    echo get_permalink($post_new->ID);
    echo '">';
    echo mysql2date('j.m.Y',  $post_new->post_date); 
    echo ' - ';
    echo $post_new->post_title;
    echo '</a></li>';
endforeach;    
?>
</ul>

То есть мы получаем все записи с нужным нам условием get_posts(‘category=1&numberposts=3’) в объект $posts_new. Далее, мы просто обходим его в цикле и выводим нужные нам записи.

Список подрубрик текущей рубрики

Нужно вывести список подрубрик текущей рубрики без родителей.
Т.е.
Украина (ua)
-Киев
-Севастополь
-Ялта
Россия
-Москва
-Питер
….

Чтобы когда человек находится в /ua/ выводились только города Украины.

Все сводится к тому, что нужно добавить в wp_list_cat child_of=ХХ, где ХХ – код подрубрики. Однако как это сделать автоматически. Т.е. в какой переменной храниться код текущей рубрики, а еще лучше массив всех родителей (если глубина большая)?

Пока писал нашел ответ –
wp_list_cats(‘sort_column=menu_order&optioncount=0&child_of=’.$cat); ?> – $cat – нужно было вынести за кавычку.

Однако нужен код самого главного родителя. Т.е. когда захожу в Киев, то города Украины пропадают.
🙁

В каком массиве это хранится или как получить такой массив?

Исключить НЕСКОЛЬКО категорий с главной

<?php
   if (is_home()) {
      query_posts("cat=-1,-2,-3");
   }
?>

Исключены категории с id= 1, 2 и 3

Этот код следует добавить в index.php Вашей темы перед началом Цикла (loop). Классический Цикл начинается так:

<?php while (have_posts()) : the_post(); ?>

Источник: query_posts

UPD 28.05.2007
Можно воспользоваться плагином Category Visibility

Категории и подкатегории в sidebar

для wordpress 1.5.x — 2.0.x

Что сделать, чтобы в sidebar ссылки на категории отображались так:

категория 1
— подкатегория 1.1
— подкатегория 1.2
— подкатегория 1.3
категория 2
— подкатегория 2.1
— подкатегория 2.2

В коде все это хозяйство выглядит так:

<ul>
  <li>категория 1
       <ul class="children">
           <li>подкатегория 1.1</li>
           <li>подкатегория 1.2</li>
           <li>подкатегория 1.3</li>
       </ul> 
  </li>
  <li>категория 2
       <ul class="children">
           <li>подкатегория 2.1</li>
           <li>подкатегория 2.2</li>
       </ul> 
  </li>
</ul>

Решение:
WordPress для подкатегорий предусмотрел специальный класс, просто добавьте в style.css своей темы

.children

и оформляйте ссылки на подкатегории (они же вложенные рубрики) как душе угодно!
Не забывайте, что ссылки на категории/подкатегории WordPress выводит в виде списков (ul, li), то есть — ul class="children"

ДЛЯ ТЕХ, КТО В ТАНКЕ, НА БИС: WORDPRESS САМ! ВЫВОДИТ UL CLASS="CHILDREN" ДЛЯ ПОДКАТЕГОРИЙ. ВСЁ, ЧТО ВАМ НУЖНО СДЕЛАТЬ — ПРОПИСАТЬ КЛАСС .children В style.css СВОЕЙ ТЕМЫ.

А также:
Для того, чтобы отображались вложенные рубрики (подкатегории) под родительскими категориями (как в примере выше), открываем sidebar.php, ищем <?php wp_list_cats(); ?> и изменяем его следующим образом:

<?php wp_list_cats('hide_empty=0&hierarchical=1'); ?>

hide_empty=0 показываем ссылки на пустые категории (в которых еще нет постов)
hierarchical=1 отображаем подкатегории под родительской категорией

Читаем Кодекс Вордпресса: wp_list_cats
Не знаете, что такое класс в css и что с ним делать? Учим css, подробно про ul

для wordpress 2.1.x и ВЫШЕ

В wp версии 2.1.0 и выше вместо wp_list_cats используется wp_list_categories.
Порядок действий тот же.

——————————————————————
——————————————————————
UPD
Как отсортировать рубрики в sidebar

проблемы с кодировкой

Рассмотрим случай, когда «иегорлифы» появились после внесения изменений в тему или вставку счетчиков или после русификации плагина

Правило тут одно и оно очень простое:

Если вы открыли файлы темы (или файлы плагина) и изменили их (русифицировали например), сохраняйте в той же кодировке, в которой у вас блог.
Если блог в кодировке utf-8, сохраняйте в utf-8 (без BOM)

Для этого лучше использовать редактор, который поддерживает utf.
Например: gvim, PSPAD, dreamweaver (PSPAD и gVim — бесплатные)
Можно сохрянять и в Блокоте, тогда не забывайте выбирать "Сохранить как" и "Кодировка" — utf-8

Топики по теме «проблемы с кодировкой»:
1. Распространенные ошибки при работе с WordPress

2. Проблемы с буквой "ш" и "и"
Еще решение от Yana (Проблемы с буквой "ш" и "и"):
в файле wp-settings.php в самом низу после:

do_action('init');

добавить две строчки:

mysql_query("SET CHARACTER SET utf8");
mysql_query("SET NAMES utf8");

Вывод на главной странице анонсов, а не сообщений целиком

Чтобы на главной странице блога выводились короткие анонсы сообщений, в посты нужно вставлять тэг <!–more–> (в визуальном редакторе также есть кнопка, вставляющая этот тэг).

Исключить определенную категорию с главной

ОДИН ИЗ ВАРИАНТОВ:

Основной цикл (loop) для файла index.php темы будет выглядеть так:

<?php $top_query = new WP_Query('cat=-1&showposts=10'); ?>
<?php while($top_query->have_posts()) : $top_query->the_post();
$first_post = $post->ID; ?>
<div class="post" id="post-<?php the_ID(); ?>">
<h2><a href="<?php the_permalink() ?>" rel="bookmark"
title="Permalink: <?php the_title(); ?>"><?php the_title();
?></a></h2>
<div class="entry">
<?php the_content('Далее…'); ?>
</div>
</div>
<?php endwhile; ?>

Исключена категория с id=1 (cat=-1)
Выводятся посл. 10 постов (showposts=10)

UPD 28.05.2007
Можно воспользоваться плагином Category Visibility

Вывод на главной статичной страницы

Задача:
Сделать так, чтобы на главной странице выводилась статичная страница (Page)
Решение:
Для того, чтобы вывести на главной вместо постов статичную страницу, находим начало цикла (loop) в файле index.php (или home.php — если такой файл есть в теме) темы:

<?php while (have_posts()) : the_post(); ?>

И перед этой строчкой вставляем код:

<?php query_posts('page_id=7'); ?>

Где 7 — это id страницы (Page). Id страницы можно узнать в админке «Управление» — «Страницы»

или

<?php query_posts('pagename=about'); ?>

Где about — это slug (короткая ссылка) этой страницы.

Про query_posts: http://codex.wordpress.org/Template_Tags/query_posts

UPD
Если у Вас версия wordpress 2.1.x, то все намного проще — статичную страницу в качестве главной можно выбрать в админке.

Плагины, активные сразу после установки

Доброго времени суток, уважаемые доны 🙂
Возник вопрос – вопрос – в скором времени, возможно придется развертывать несколько сайтов на вордпрессе – возможно ли прописать где то какие плагины будут уже активны сразу после установки? А то несколько напряжно руками их активировать каждый раз..

Надпись на фотографии

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

Anonymous
Отправить
Ответ на: