Статьи

Как в дальнейшем освоить API менеджера ссылок WordPress

Ранее мы показали, как использовать менеджер ссылок WordPress для хранения и управления списком ссылок, а также рассказали, как использовать wp_list_bookmarks() из API менеджера ссылок .

Мы видели, что мы можем многое сделать с помощью этой функции, но она не идеальна для всех случаев. В этой статье я покажу вам, как использовать другие функции, содержащиеся в API менеджера ссылок WordPress.

В отличие от wp_list_bookmarks() , эти функции не отображают ссылки: они возвращают их, и вы сами решаете, хотите ли вы их отображать и каким образом, гораздо более точным способом, чем при использовании параметров wp_list_bookmarks() .

Получение одной ссылки

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

Функция для получения всех данных о ссылке

Первая функция, которую мы здесь get_bookmark() это get_bookmark() . Он используется для получения всех данных о ссылке и требует одного параметра: идентификатор требуемой ссылки. Чтобы получить этот идентификатор, вы можете, например, перейти на панель администрирования и отредактировать ссылку: идентификатор можно увидеть в переменной link_id в URL-адресе.

Получение идентификатора ссылки

Объект ссылки

Чтобы получить данные, которые нам get_bookmark() , укажите этот идентификатор в качестве параметра в get_bookmark() .

 $link = get_bookmark(8); 

Переменная $link представляет собой список объектов всех данных о целевой ссылке: для каждой части информации, которую вы можете добавить при создании ссылки, у этого объекта есть соответствующее свойство. Это, например, содержимое объекта, который я получил с предыдущей строки.

 stdClass Object ( [link_id] => 8 [link_url] => http: 

Большинство из этих свойств понятны, поскольку их имя совпадает с соответствующими полями в форме «Добавить ссылку»: link_url — это URL-адрес ссылки, link_name — это ее имя и т. Д. Обратите внимание, что вы можете получить идентификатор ссылки с помощью свойства link_id : здесь это кажется немного бесполезным, поскольку вы уже знаете это, но позже я покажу вам, что это может быть полезно.

 echo '<a href="' . $link->link_url . '">' . $link->link_name . '</a>'; 

Теперь я опишу некоторые свойства более подробно. Например, link_category : почему это свойство является массивом? Это связано с тем, что в форме «Добавить ссылку» вы можете выбрать несколько категорий для своей ссылки: в этом свойстве перечислены все выбранные идентификаторы категорий в массиве (даже если вы выбрали только одну категорию).

Свойство link_owner дает нам идентификатор пользователя, который добавил ссылку. Если вам нужно отобразить больше информации об этом пользователе, вы можете использовать get_user_by() .

 // Get the owner's name $owner_name = get_user_by('id', $link->link_owner)->display_name; // Echoes a string containing the owner's name and their link echo 'Here is ' . $owner_name . '\'s link: <a href="' . $link->link_url . '">' . $link->link_name . '</a>'; 

Свойство link_target содержит значение, указанное в разделе «Цель» формы «Добавить ссылку». Вы можете отобразить его значение непосредственно в target атрибуте вашей ссылки.

 echo '<a href="' . $link->link_url . '" target="' . $link->link_target . '">' . $link->link_name . '</a>'; 

Обратите внимание: если вы решили открыть ссылку на той же вкладке, WordPress сохраняет пустую строку в link_target , поэтому вы можете легко обнаружить ее, если не хотите отображать target атрибут.

 // Build the target attribute $target = (empty($link->link_target)) ? '' : ' target="' . $link->link_target . '"'; // Echoes the link with its target attribute (if it needs one) echo '<a href="' . $link->link_url . '"' . $target . '>' . $link->link_name . '</a>'; 

Как и свойство link_target свойство link_rel содержит значение, указываемое в атрибуте rel поэтому вам не нужно ничего делать перед его отображением.

link_image и link_rss содержат URL-адреса, которые вы указали в соответствующих полях. Это означает, что их значения являются URL-адресами: в частности, вы должны создать свой собственный тег img если вы хотите отобразить изображение. Преимущество состоит в том, что вы можете делать с этим изображением все, что хотите, даже отображая его, например, как фоновое изображение. В приведенном ниже примере мы не отображаем имя ссылки, а только его изображение.

 <a href="<?php echo $link->link_url; ?>"> <img src="<?php echo $link->link_image; ?>" alt="<?php echo $link->link_name; ?>" /> </a> 

Обратите внимание, что этот пример не проверяет, является link_image свойство link_image пустым. Если созданный вами скрипт предназначен не только для вас (например, для плагина или темы), вы должны проверить это перед созданием тега img .

Наконец, мы находим свойство link_visible чтобы узнать, является ли ссылка приватной или нет. К сожалению, его значение не логическое, а строка: если ссылка видима (то есть, если это не приватная ссылка), link_visible устанавливается на 'Y' , в противном случае он устанавливается на 'N' . Ниже мы отобразим ссылку, только если она видна.

 if ($link->link_visible == 'Y') echo '<a href="' . $link->link_url . '">' . $link->link_name . '</a>'; 

Что если я хочу массив?

Мы описали свойства объекта, возвращаемого get_bookmark() . Однако эта функция не всегда возвращает объект: это поведение по умолчанию, но вы можете выбрать получение массива, если предпочитаете, или если у вас нет выбора по какой-либо причине.

Чтобы выбрать тип данных, которые вы получите с помощью этой функции, вы можете использовать второй параметр. Он принимает константу PHP в качестве значения и по умолчанию имеет значение OBJECT .

Чтобы получить ассоциативный массив, вы можете установить его в ARRAY_A . Ключами этого массива будут свойства, которые мы видели в объекте выше, поэтому вы должны быть знакомы с этим.

 $link = get_bookmark(8, ARRAY_A); echo '<a href="' . $link['link_url'] . '">' . $link['link_name'] . '</a>'; 

Вы также можете выбрать нумерованный массив с ARRAY_N . Тогда будет сложнее получить конкретные данные, но данные упорядочены так же, как они были в ассоциативном массиве или в объекте: мы найдем идентификатор в первой записи, затем в URL, затем в имени, и так далее.

Не очень бесполезный фильтр

Чтобы закончить с get_bookmark() , вы должны знать, что эта функция допускает третий параметр: фильтр, применяемый к полученным данным.

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

По умолчанию третий параметр get_bookmark() имеет значение 'raw' и WordPress возвращает данные сразу после фильтров по умолчанию. В большинстве случаев этого достаточно, но вы также можете применить другие фильтры.

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

В этом случае вы можете использовать фильтр edit . Затем WordPress применит некоторые другие модификации, особенно для экранирования символов HTML, поэтому вам не придется делать это самостоятельно.

 $link = get_bookmark(2, OBJECT, 'edit'); echo '<textarea>' . $link->link_notes . '</textarea>'; 

Функция для получения конкретной информации

Теперь, когда мы увидели, какую информацию мы можем получить по одной ссылке, пришло время взглянуть на новую функцию: get_bookmark_field() . Эта функция полезна в том случае, если вы хотите получить определенную информацию для одной ссылки, не извлекая другую информацию.

Функция get_bookmark_field() требует два параметра: поле (то есть информация для извлечения) и идентификатор рассматриваемой ссылки. Поле представляет собой строку, соответствующую свойствам объекта (или ключам ассоциативного массива), возвращаемым get_bookmark() . Например, если вы хотите получить URL-адрес ссылки, напишите строку ниже:

 $url = get_bookmark_field('link_url', 8); 

что эквивалентно этому:

 $url = get_bookmark(8)->link_url; 

Получение нескольких ссылок

Выше мы рассмотрели, как мы можем получить одну ссылку, но как насчет получения нескольких ссылок? Хорошие новости: для этого есть функция: get_bookmarks() .

Известный выход

Вы можете попробовать get_bookmarks() без каких-либо параметров: тогда он вернет массив, содержащий все ссылки, хранящиеся в Менеджере ссылок.

Этот массив пронумерован, каждая запись представляет собой объект, представляющий одну ссылку. Этот объект такой же, как мы рассмотрели выше. Например, мы можем перечислить все ссылки, независимо от их категории.

 $links = get_bookmarks(); echo '<ul>'; foreach ($links as $link) echo '<li><a href="' . $link->link_url . '">' . $link->link_name . '</a></li>'; echo '</ul>'; 

фильтрация

Если вам не нужны все ссылки, хорошей идеей может быть фильтрация вывода get_bookmarks() . Это может быть легко достигнуто, так как эта функция принимает только параметры. Еще раз, вы должны быть знакомы с этим, так как этот параметр похож на тот, который мы рассмотрели в wp_list_bookmarks() .

Фактически, этот параметр является массивом, в котором перечислены все параметры, которые нам нужны для фильтрации вывода. Мы описали большинство этих опций, когда смотрели на wp_list_bookmarks() . Вот список известных вариантов:

  • чтобы отсортировать ссылки,
  • order отменить (или нет) заказ,
  • limit получение только ограниченного количества ссылок для каждой категории,
  • category чтобы выбрать категории для поиска,
  • category_name чтобы выбрать только одну категорию для извлечения (используя ее имя),
  • hide_invisible не получить приватные ссылки.

В дополнение к этим опциям мы находим три новых варианта. Во-первых, у нас есть include который представляет собой строку, в которой вы указываете список идентификаторов ссылок, которые вы хотите получить. Обратите внимание, что если вы используете эту опцию, WordPress будет игнорировать значения в category , category_name и exclude (следующий вариант, который мы рассмотрим).

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

 $args = array( 'orderby' => 'rating', 'order' => 'DESC', 'include' => '4,5,10' ); $links = get_bookmarks($args); 

Опция exclude позволяет нам исключить список ссылок, используя их идентификаторы. Вы можете объединить эту опцию с другими фильтрами (кроме include ), например, чтобы получить категорию без указанной ссылки.

 $args = array( 'category_name' =&gt; 'tools', 'exclude' =&gt; '6' ); 

Наконец, мы находим опцию search которая принимает строку для поиска ссылок, URL-адресов, имен и описаний. В приведенном ниже примере будут получены все ссылки, содержащие слово sitepoint в ранее перечисленных полях.

 $args = array( 'search' => 'sitepoint' ); 

Обратите внимание, что вы можете комбинировать эту опцию, например, чтобы искать только в некоторых категориях. Поиск не зависит от регистра.

В заключение

Управлять списком ссылок легко с помощью менеджера ссылок WordPress. По умолчанию CMS предоставляет нам несколько полезных инструментов, но теперь, с помощью API, который мы исследовали, вы можете создавать свои собственные инструменты.

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