Времени придумывать что то самому последние полгода вообще нет, потому дорабатываю свои плагины по заявкам пользователей :).
References в плане доработок — это такая заброшка, которую я делал в рамках доработок сайта obrazovanie66.ru. Там требовалось установить множество связей между разными типами публикаций, а стандартного функционала не было.
Но недавно в support форум написал один чувак и попросил сразу кучу доработок, которые я бы сам вряд ли стал делать для себя (меня всё устраивало). Таким образом, пользователь подопнул прогресс доработок.
В итоге в версию 1.1 были добавлены два существенный дополнения — набор API функций и поддержка shortcode
API функции
Плагин получил набор собственный функций я-ля API. Они позволяют, в дополнении к настройке из админки, конфигурировать связи из PHP кода, к примеру, после регистрации кастомных типов материалов и работать собственно с данными.
Все функции являются статикой класса REFShraAPI. Вот их список и краткое описание (подробнее смотрите в коде файла модуля references.php).
REFShraAPI::config_load($postType = NULL, $refKey = NULL);
// Возвращает текущий массив конфигурации связей. Параметры позволяют отфильтровать список.
REFShraAPI::config_add($postType, $refKey, $linkedTypes, $title)
// Добавляет/Обновляет связь.
REFShraAPI::config_remove($postType, $refKey);
// Удаляет связь (но не трогает данные, которые храняются в post meta) по паре postType / refKey.
REFShraAPI::get($postID = NULL);
// Получает список связей для указанного post->ID. Если ID не указан, функция пытается получить текущий ID сама.
REFShraAPI::update($postID = NULL, $refkey, $postIDs);
// Обновляет данные для связей указанного материала.
Shortcode REF
В плагин добавлена поддержка шот-кода ref. Этот шоткод позволяет вставить список ссылок в нужное место статьи в виде unordered list (<ul>…</ul>). Шоткод может принимать два атрибута и позволяет зацепиться с помощью двух фильтров (apply_filter).
[ref id=»POST_ID» key=»REFERENCE_KEY»]
Т.е есть возможность указать напрямую ID публикации и ключ связи. Если атрибуты не заданы, то используется текущая публикация и выводятся списки всех связей.
Фильтр reference_shortcode_items
Первый фильтр вызывается для массива ссылок, предоставляя возможность переопределить его. Элементы массива — объекты вида:
1 2 3 4 5 |
{ ID, // идентификатор публикации post_title, // заголовок статьи post_type // тип материала } |
Если вы захотите поменять данные, то вам нужно будет добавить код вида:
1 2 3 4 5 6 7 8 9 10 11 |
add_filter( 'reference_shortcode_items', 'my_filter_implementation' ); function my_filter_implementation($pubs, $attr, $key, $ids ) { //$pubs - массив объектов вида, показанного выще //$attr - массив атрибутов, переданных вместе с shortcode REF //$key - ключ набора ссылок (т.н. reference key) заданный при регистрации связи //$ids - массив ключей связанных публикаций, который был взят из мета данных статьи ... // тут вы что то со всем этим делаете - и нужно после этого вернуть набор ссылок return $pubs; } |
Фильтр reference_shortcode_output
Этот фильтр вызывается, когда уже собран шаблон списка ссылок, прямо перед его выводом. В фильтр передаются те же доп. параметры. Зацепиться вы можете вот так:
1 2 3 4 5 6 7 8 9 10 11 |
add_filter( 'reference_shortcode_output', 'my_filter_implementation' ); function my_filter_implementation($output, $attr, $key, $ids ) { //$output - HTML код списка ссылок, т.е. весь <ul>...</ul> //$attr - массив атрибутов, переданных вместе с shortcode REF //$key - ключ набора ссылок (т.н. reference key) заданный при регистрации связи //$ids - массив ключей связанных публикаций, который был взят из мета данных статьи ... // тут вы что то со всем этим делаете - и нужно вернуть исправленный шаблон return $output; } |