WordPress. Простой шорткод для постоянных ссылок

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

Во время создания шаблона для WordPress, у вас может возникнуть необходимость указать ссылку на конкретную страницу прямо в шаблоне. Для этого есть специальная функция, которую вы можете использовать.

Плохой пример:

[php]
<a href="/contact/">Контакты</a>
[/php]

Хороший пример:

[php]
<a href="<?php echo get_permalink(12); ?>">Контакты</a>
[/php]

Здесь «12» – это ID нужной записи или страницы. Почему же этот способ правильней?

  • ссылка будет работать, даже если вы измените структуру ссылок;
  • ссылка будет работать, даже если сайт будет перенесен с субдомена (который вы использовали для тестирования) на домен верхнего уровня.

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

По умолчанию, мы не можем выполнять PHP-код внутри нашей страницы или записи, а следовательно нет возможности использовать функцию get_permalink. Что мы можем сделать, так это создать специальный шорткод, с точно такой же функциональностью. И вот он:

[php]
function permalink_thingy($atts) {
extract(shortcode_atts(array(
‘id’ => 1,
‘text’ => "" // значение по умолчанию, если ничего не указано
), $atts));

if ($text) {
$url = get_permalink($id);
return "<a href=’$url’>$text</a>";
} else {
return get_permalink($id);
}
}
add_shortcode(‘permalink’, ‘permalink_thingy’);
[/php]

Этот шорткод можно использовать двумя способами:

Просто:

[php]
<a href="[permalink id=49]">Использование без текста</a>
[/php]

Здесь вам нужно просто указать параметр id и шорткод вернет URL. Полученный URL можно использовать любым способом, например, если вам нужно присвоить ссылке определенный класс или еще для чего-нибудь.

С текстом:

[php]
[permalink id=49 text=’providing text’]
[/php]

Этот способ вернет полностью форматированную ссылку, с текстом, который вы указали.

Перевод статьи «Easy Shortcode Permalinks», автор Chris Coyier


Posted

in

,

by

Comments

10 responses to “WordPress. Простой шорткод для постоянных ссылок”

  1. deerua Avatar

    ВП зло 😉 лучше катить свой велосипед %)))

    1. dreamhelg Avatar
      dreamhelg

      всегда было интересно узнать, за что люди не любят ВП, можно подробнее?)

    2. Илья Avatar
      Илья

      я бы сказал не ВП, а CMS вообще зло
      шаблонность ни чего хорошего в себе не несёт. я за уникальность каждого сайта в инете.

      1. wicked_kiD Avatar

        Илья, а кто мешает делать уникальные вещи на CMS? и не кажется ли вам пустой тратой времени создавать каждый раз все заново, при том, что там 100% будут какие-либо дыры и недоработки..?

        1. Илья Avatar
          Илья

          Абсолютно согласен, что при написании с нуля будут дыры и времени это займёт огромную кучу. Но я и не призываю к этому. Моё мнение – надо использовать готовые [мини]модули. Но не целые решения.

  2. bm Avatar

    Придумывать “свой велосипед” нужно когда уже существующий “транспорт” не оправдывает ожиданий. О том насколько соответствует требованиям WP можно судить о его популярности.
    Кстати, я сам создаю велосипед и изучая статьи о движках иногда ловлю себя на мысли, а нафига я это делаю, ведь всё уже есть.

  3. brutal Avatar
    brutal

    Честно говоря, нельзя сказать что способ с указанием id страницы выглядит изящным. Совершенно непонятно куда ведёт такая ссылка.
    К тому же изменение урлов на сайте бывает очень редко (из личной практики).

    1. Flip:Who? Avatar

      Сделай, наведи и посмотри куда она ведёт 🙂

      Редко, но метко. Помнится один умник начитался SEO дряни и накосячил с ЧПУ, в итоге пришлось поднимать блог из бэкапа, вроде ВП 2.7 косячил с ЧПУ, поставив 2.9 я был приятно удивлён 🙂
      прописав ТОЛЬКО /%postname%/ (без плагинов, УРА!) всё заработало 🙂

  4. Sergei Plaxienko Avatar
    Sergei Plaxienko

    Полезная функция.
    Спасибо.

  5. Татьяна Avatar
    Татьяна

    Как изменить функцию .get_permalink(). на функцию, которая даст ссылку на изображение, выводящееся в посте

Leave a Reply to brutal Cancel reply

Your email address will not be published. Required fields are marked *