Метка: WordPress

  • 24.05.16
  • 20:50
  • 769
  • 0

За один запуск WordPress активирует не более одного хука wp_ajax_* — в случае, когда обрабатывается AJAX-запрос. При обработке не-AJAX-запросов эти хуки не активируются. Поэтому, когда количество обработчиков AJAX велико, регистрировать их все сразу нет смысла.

В самом начале обработки запроса скрипт /wp-admin/admin-ajax.php задаёт константу DOING_AJAX как true, а действие, которое должно быть обработано, находится в $_REQUEST['action']. Этого достаточно, чтобы определить обработчик, который должен быть запущен. Если имена функций-обработчиков построены в виде "myplugin_ajax_{$action}", то регистрация нужного хука может выглядеть так:

После этого для добавления нового обработчика AJAX потребуется просто определить функцию с соответствующим именем.

  • 13.04.16
  • 21:52
  • 3622
  • 0

Ограничить выдачу скриптов и стилей определённым экраном можно так:

Список идентификаторов экранов WordPress приведён в конце заметки.

  • 19.07.15
  • 12:15
  • 31608
  • 2

У одного ресурса, работающего на WordPress, возникли такие проблемы:

  • невозможно создать пост любого типа;
  • пользователи не могут зарегистрироваться;
  • при комментировании WordPress заявляет, что посетитель «комментирует слишком быстро» или что «комментарий сохранить не удалось», хотя сам комментарий после создания может корректно отображаться;
  • ни манипуляции с плагинами/темами, ни переустановка/обновление WordPress результата не дают.

Причина проблемы кроется в отсутствии автоинкремента и, возможно, первичных ключей у некоторых таблиц — WordPress перекладывает на БД определение идентификаторов новых постов, комментариев, регистрируемых пользователей, термов и т.д.

Лечение описывается в заметке о лечении, а симптомы выглядят так:

  • 19.07.15
  • 12:14
  • 3687
  • 13

Дан ресурс на WordPress, у таблиц которого отсутствует автоинкремент и первичный ключ. Как так получилось — неизвестно, предполагать не буду. Ресурс проработал в таком состоянии почти месяц, в течение которого пользователи не могли регистрироваться, невозможно было создавать новые посты, наблюдались проблемы с комментированием.

Симптомы описаны здесь.

На время починки ресурса его следует запереть при помощи .htaccess, размещённом в корне сайта. Для apache 2.4 в .htaccess следует добавить строку

и закомментировать строку "Require all granted", если таковая имеется.

Для apache 2.2 и более старых версий .htaccess должен содержать

Устанавливать и/или активировать плагины и изменять их настройки при таком положении дел не безопасно: вся работа с ними опирается на базу данных. Её использование в этом состоянии может усугубить ситуацию, создав множество некорректных записей, вычленить каждую из которых до возникновения из-за неё какой-либо проблемы будет невозможно.

  • 19.07.15
  • 12:14
  • 2383
  • 0

При починке таблиц после потери автоинкремента переопределение полей идентификаторов может привести к коллизиям. Выглядит это так:

Перенумеровать таблицу в этом случае можно обходным путём:

  • 20.06.15
  • 09:05
  • 625
  • 0

Автор: Pippin Williamson.
Оригинал: Using the WordPress Heartbeat API.

Замечание: перевод вольный, некоторые высказывания заменены на более понятные (на мой взгляд), и добавлены примечания. Все примечания опираются на WP 4.2.2.

— Г.К.

В WordPress 3.6 был введён новый API, называемый «WordPress Heartbeat». На нём основано множество сделанных в этой версии изменений, включая более развитую систему отслеживания ревизий, улучшенное управление пользовательскими сессиями и многое другое. Я собираюсь показать краткий пример использования этого API.

  • 07.06.15
  • 09:52
  • 924
  • 0

Эти функции похожи:

  • get_the_terms возвращает информацию о термах заданной таксономии, привязанных к заданному посту;
  • wp_get_object_terms возвращает информацию о термах одной или нескольких таксономий, привязанных к одному или нескольким постам, а также имеет ряд дополнительных опций.

Кроме этого каждая из них обладает другими особенностями, о которых надо знать.

  • 04.06.15
  • 15:13
  • 435
  • 0

Большинство параметров термов хранится в БД — они всегда присутствуют в объекте терма. Некоторые параметры добавляются функциями и в БД отсутствуют (на момент WordPress 4.2.2 таких параметров два — filter и object_id).

  • 03.06.15
  • 19:05
  • 1707
  • 2

В БД хранятся только термы и их метаданные. Информация о таксономиях находится на стороне PHP-кода.

Каждый терм имеет идентификатор, ярлык, имя и группу, а также связан со своей таксономией. Эта связь — «терм-таксономия» — обладает собственным идентификатором и привязывается к постам в качестве терма. К ней же относится его описание. Сам терм непосредственной связи с постами не имеет.

  • 13.05.15
  • 23:30
  • 463
  • 0

Одна из тем имеет сайдбары, оформление любого виджета или типа виджетов в которых задаётся на соотв. экране настройки. Интерфейс экрана должен содержать выпадающие списки виджетов и их типов.

Задача: составить списки виджетов и типов виджетов. При этом

  1. список всех зарегистрированных виджетов требуется в виде хеша $id_base => $name;
  2. список всех размещённых на сайдбарах виджетов должен быть сгруппирован по сайдбарам:
    Текст пунктов списка имеет вид "{$name} ({$title})", пустой заголовок не приводится; значения пунктов — идентификаторы виджетов.