Wordpress, PHP, проблема с кодировкой URL

Wordpress предоставляет функцию под названием «the_permalink()», которая возвращает, как вы уже догадались!, постоянную ссылку на данное сообщение в цикле сообщений.

Я пытаюсь закодировать URL-адрес этой постоянной ссылки, и когда я выполняю этот код:

<?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. Мысли?


person Scott Porad    schedule 08.11.2008    source источник
comment
я считаю 6 операторов печати, но только 5 строк вывода ..?   -  person nickf    schedule 08.11.2008


Ответы (3)


Согласно документам, the_permalink выводит постоянную ссылку, а не возвращает ее. Итак, urlencode не получает ничего для кодирования.

Попробуйте get_permalink.


[ИЗМЕНИТЬ]

Немного поздно для редактирования, но я не понимал, что количество отпечатков было такой проблемой.

Вот откуда они все берутся:

<?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)
?>
person Jonathan Lonowski    schedule 08.11.2008
comment
почему тогда $permalink заполняется так, как ожидалось? - person nickf; 08.11.2008
comment
это не так. Вы получаете только 5 строк, но вы, очевидно, вызываете print 6 раз. Это означает, что print($permalink); ничего не выводит. - person jishi; 08.11.2008
comment
Однако в первый раз get «распечатывается» через прокси еще до того, как будет сделан вызов print: когда он пытается назначить $ permalink. Печать ничего не печатает, но она уже напечатана, поэтому количество напечатанных строк составляет 5, а не 4. - person Matthew Scharley; 08.11.2008

the_permalink() повторяет постоянную ссылку

get_the_permalink() возвращает постоянную ссылку, чтобы ее можно было присвоить переменной.

(то же самое касается большинства функций в WordPress: у the_something() есть функция get_the_something(), которая возвращает значение, а не повторяет его)

person Ozh    schedule 12.11.2008
comment
За исключением того, что в этом случае get_the_permalink() не существует — это get_permalink(), и для него требуется идентификатор сообщения. По сравнению с другими функциями мне кажется задницей назад. - person Artem Russakovskii; 28.10.2010
comment
@Artem, get_permalink не требует идентификатора сообщения, это необязательно. codex.wordpress.org/Function_Reference/get_permalink - person Lloyd Dewolf; 17.09.2011

У @Jonathan есть причина, по которой вы должны решить эту проблему в WordPress (например, использовать правильную функцию для работы).

Вот как это исправить, если нет функции, возвращающей строку:

ob_start();
the_permalink();
$permalink = ob_get_clean();
print(urlencode($permalink));
person Matthew Scharley    schedule 08.11.2008