Каков наилучший способ сбора данных, возвращаемых функцией в PHP? - PullRequest
2 голосов
/ 28 марта 2009

Я новичок в программировании и обучении с Wordpress.

the_title(); //outputs the title of the page

Я хочу записать заголовок страницы в строковую переменную, чтобы я мог манипулировать ею с помощью функций strtolower и str_replace.

Единственный способ заставить его работать - это буферизация вывода.

ob_start();
the_title();
$result = ob_get_clean();

echo str_replace(" ","-",strtolower($result));

/*there has got to be an easier way....
i dont fully understand why */

str_replace(" ","-",strtolower(the_title())); 

Что я делаю не так?

Ответы [ 5 ]

10 голосов
/ 28 марта 2009

Если то, что вы действительно ищете, это функция wp_title, то второй аргумент, который он принимает, - это логическое значение, должно ли оно отображать его или возвращать. Передайте значение false, чтобы оно вернуло его в var, тогда вы можете сделать это:

$mytitle = wp_title(null, false);

В противном случае ваш единственный вариант - найти искомую функцию и изменить исходный код.

3 голосов
/ 28 марта 2009

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

Это разница между f1 () и f2 () в следующем примере.

// Returns a string, prints nothing.
function f1() {
    return "String";
}

// Prints a string, returns nothing.
function f2() {
    echo "String";
}
2 голосов
/ 28 марта 2009

Wordpress - приложение УЖАСНОЕ , с которого можно научиться программировать. Он использует эти глобальные функции, которые «просто работают», но они выполняют очень специфические задачи «внутри« Цикла »». Как я уже сказал, это ужасный пример того, каким должен быть хороший код.

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

Как это бывает, есть еще больше способов получить заголовок, но я действительно думал, что для этого примера вы сделаете что-то вроде:

$this_post = get_post($post); // I *think* $post is the post ID inside the loop though I could be wrong
echo $this_post->post_title;

Но, как говорит другой автор (правильно), вы можете использовать довольно простую функцию wp_title (), чтобы получить текущий заголовок цикла.

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

Блог - это действительно простой набор данных (даже более того, в случае WP, потому что он не полностью нормализован), но вместо одного способа вывода заголовка <?php echo $post->title; ?> у вас есть множество способов, и все они делают слегка разные вещи. .

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

А если вы действительно хотите повеселиться, взгляните на Джанго.


Достаточно разглагольствования в Wordpress. Если в будущем вы будете бороться с чем-то подобным, у которого не будет 100 способов сделать это, я действительно не рекомендовал бы захват выходного буфера. Он использует целый набор ресурсов для чего-то относительно простого.

Самый простой способ может быть простым: взять источник исходной функции, вставить его в новую функцию и заменить echo на return.

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

1 голос
/ 30 марта 2009

Почти каждая функция 'the_*' в Wordpress имеет аналог 'get_the_*'. Итак, вам просто нужно использовать

echo str_replace(" ","-",get_the_title());

И это сработает как шарм. есть также get_the_excerpt(), get_the_content () и the_permalink (), которые каким-то образом нарушают соглашение об именах (Бог знает, сколько раз я написал "get_the_permalink()" и был разочарован тем, почему это не сработало)

Ура!

1 голос
/ 28 марта 2009

только что решил, что я поделюсь с вами своим окончательным решением, ребята.

Это должно было дать моему телу теги уникальные идентификаторы в WordPress. * /

$title =wp_title(null,false);
echo strtolower(str_replace(' ','-',ltrim($title)));


//without the ltrim() 2 dashes are created before the title.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...