WordPress предоставляет функцию под названием «the_permalink ()», которая возвращает, как вы уже догадались, постоянную ссылку на заданный пост в цикле сообщений.
Я пытаюсь URL кодировать, что permalink и когда я исполняю этот код:
<?php print(the_permalink()); $permalink = the_permalink(); print($permalink); print(urlencode(the_permalink())); print(urlencode($permalink)); $url = 'http://wpmu.local/graphjam/2008/11/06/test4/'; print($url); print(urlencode($url)); ?>
он дает эти результаты в HTML:
http://wpmu.local/graphjam/2008/11/06/test4/ http://wpmu.local/graphjam/2008/11/06/test4/ http://wpmu.local/graphjam/2008/11/06/test4/ http://wpmu.local/graphjam/2008/11/06/test4/ http%3A%2F%2Fwpmu.local%2Fgraphjam%2F2008%2F11%2F06%2Ftest4%2F
Я ожидал бы, что строки 2, 3 и 5 вывода будут закодированы в URL, но только строка 5 такова. Мысли?
Согласно документам, the_permalink
печатает постоянную ссылку и возвращает ее. Таким образом, urlencode
не получает ничего для кодирования.
Попробуйте get_permalink
.
[ EDIT ]
Немного поздно для редактирования, но я не понимал, что подсчеты печати были такой проблемой.
Вот откуда они все:
<?php print(the_permalink()); // prints (1) $permalink = the_permalink(); // prints (2) print($permalink); // nothing print(urlencode(the_permalink())); // prints (3) print(urlencode($permalink)); // nothing $url = 'http://wpmu.local/graphjam/2008/11/06/test4/'; print($url); // prints (4) print(urlencode($url)); // prints (5) ?>
the_permalink()
перекликается с постоянной the_permalink()
get_the_permalink()
возвращает постоянную ссылку, поэтому ее можно назначить переменной.
(то же самое происходит с большинством функций в WordPress: the_something () имеет get_the_something (), чтобы возвращать значение вместо эхо-сигнала)
@Jonathan имеет причину, почему и как вы должны иметь дело с ним в WordPress (т. Е. Использовать правильную функцию для задания).
Вот как это исправить, когда нет функции, которая возвращает строку:
ob_start(); the_permalink(); $permalink = ob_get_clean(); print(urlencode($permalink));