2014-09-11 3 views
0

Мне интересно: есть ли способ загрузить все категории и сохранить их в другом массиве?Wordpress: получить информацию о категории

Так я получил этот код:

<?php 
$cat_args = array('orderby' => 'name','order' => 'ASC'); 

$categories = get_categories($cat_args); 

foreach($categories as $category) { 
    $args = array(
     'showposts'  => -1, 
     'category__in'  => array($category->term_id), 
     'caller_get_posts' => 1 
    ); 

    $posts = get_posts($args); 

    if ($posts) { 
     echo '<p>Category: <a href="' . get_category_link($category->term_id) . '" title="' . sprintf(__("View all posts in %s"), $category->name) . '" ' . '>' . $category->name.'</a> </p> '; 

     foreach($posts as $post) { 
      setup_postdata($post); 
      ?> <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p> <?php 
     } // foreach($posts 
    } // if ($posts 
} // foreach($categories 
?> 

Я хочу сделать так, чтобы я мог использовать его позже, как, что (вне цикла):

<?php echo $category[0] -> name . $category[1] -> name . $category[2] -> name; ?> 
+0

Обратите внимание: 'caller_get_posts' и' showposts' были обесценены пару лет назад. Они заменяются на 'ignore_sticky_posts' и' posts_per_page' соответственно –

ответ

1

Если вам просто нужен массив имен категорий, вы можете изменить свой код следующим образом; (ОБРАТИТЕ ВНИМАНИЕ: caller_get_posts и showposts было обесценился пару лет назад они, где заменены ignore_sticky_posts и posts_per_page соответственно.)

<?php 
$cat_args = array('orderby' => 'name','order' => 'ASC'); 

$categories = get_categories($cat_args); 

$category_names = array(); 
foreach($categories as $category) { 
    $category_names[] = $category->name; 
    $args = array(
     'posts_per_page'  => -1, 
     'category__in'  => array($category->term_id), 
     'ignore_sticky_posts' => 1 
    ); 

    $posts = get_posts($args); 

    if ($posts) { 
     echo '<p>Category: <a href="' . get_category_link($category->term_id) . '" title="' . sprintf(__("View all posts in %s"), $category->name) . '" ' . '>' . $category->name.'</a> </p> '; 

     foreach($posts as $post) { 
      setup_postdata($post); 
      ?> <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p> <?php 
     } // foreach($posts 
    } // if ($posts 
} // foreach($categories 
?> 

$category_names теперь будет держать массив имен категорий.

Если вам нужно отобразить список категорий с сообщениями ниже них, вы должны зарегистрироваться my post here on WPSE. Ваш метод очень ресурсоемкий и медленный. Мой метод сверхбыстрый, использует переходные процессы, а при оптимальном - только 2 дБ запросов менее 0,002 секунды

0

Примечание: Вы уже имеют данные в этом формате в переменной $ categories. Таким образом, вы можете использовать в любом месте, как этот

<?php echo $categories[0] -> name . $categories[1] -> name . $categories[2] -> name; ?> 
Смежные вопросы