2013-12-04 36 views
0

Я хочу отображать все страницы в Wordpress в коротком коде. Мой код выглядит следующим образом:Wordpress: Показать все страницы

function createTilesFromSites() { 
$args = array(
    'sort_order' => 'ASC', 
    'sort_column' => 'post_title', 
    'hierarchical' => 1, 
    'exclude' => '', 
    'include' => '', 
    'meta_key' => '', 
    'meta_value' => '', 
    'authors' => '', 
    'child_of' => 0, 
    'parent' => -1, 
    'exclude_tree' => '', 
    'number' => '', 
    'offset' => 0, 
    'post_type' => 'page', 
    'post_status' => 'publish' 
); 
$pages = get_pages($args); 
foreach ($pages as $page_data) { 
    $content = apply_filters('the_content', $page_data->post_content); 
    $title = $page_data->post_title; 
    $slug = $page_data->post_name; 
    echo "$title <br />"; 
} 
} 
add_shortcode('createTiles', 'createTilesFromSites'); 

Теперь он показывает мне страницы (мои страницы называются "1", "2", "3", "4" и "блог"). Поэтому он должен дать мне что-то вроде: «1234Blog». Это печатает меня это, но не только один раз. Он делает это 2658 ВРЕМЕНИ (по крайней мере, хром говорит об этом с cmd + f, во всяком случае, он очень длинный). Поэтому мой вывод выглядит следующим образом: «1234Blog1234Blog1234Blog1234Blog1234Blog1234Blog1234Blog1234Blog1234Blog1234Blog», например.

Что-то не в порядке с кодом? Возможно, это проблема с моей установкой Wordpress?

Спасибо за помощь.

+0

Важно возвращать, а не эхо, выход короткого кода. Объявите '$ output = '';' в начале вашей функции, соедините элементы во время цикла, например. '$ output. = $ title;' и, наконец, вернуть результат: 'return $ output;' – diggy

+0

Спасибо за отзыв, я на самом деле довольно новичок в php и wordpress:/Но это не решает мою проблему! –

ответ

0

Я думаю, что ваш код apply_filters снова вызовет ваш короткий код, чтобы он был в цикле. Таким образом, вы можете попытаться просто получить контент без применения фильтров или вычеркнуть короткий код из содержимого или вызвать remove_shortcode ('createTiles');

+0

О, вы правы! Но, apparantly, мне также нужен контент:/Как я могу это решить? –

+0

Получить контент $ content = $ page_data-> post_content; затем искать и заменить [createTiles] короткий код с пустой строкой , а затем вызвать $ содержания = apply_filters ('the_content', $ содержания); – mjhinch

+0

Что вы подразумеваете под заменой [createTiles] пустой строкой? Извините, я действительно новичок в этом:/edit: Nvm я понял его после тестирования:> Спасибо! –

Смежные вопросы