Проблема с вызовом пользовательской функции в цикле foreach

У меня есть функция custom.php, которая исключает определенную категорию из списка категорий:

function incomplete_cat_list() { $first_time = 1; foreach((get_the_category()) as $category) { if ($category->cat_name != 'Category Name') { if ($first_time == 1) { echo '<a class="cat-list" href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "See all %s" ), $category->name ) . '" ' . '>' . $category->name.'</a>'; $first_time = 0; } else { } } } } 

Я хотел бы использовать его в связанных записях foreach, но я не уверен, как это сделать … Вот код для отображения похожих сообщений по тегам или категории:

  <?php $max_articles = 4; // How many articles to display echo '<div id="related-articles" class="relatedposts"><h3>Related articles</h3>'; $cnt = 0; $article_tags = get_the_tags(); $tags_string = ''; if ($article_tags) { foreach ($article_tags as $article_tag) { $tags_string .= $article_tag->slug . ','; } } $tag_related_posts = get_posts('exclude=' . $post->ID . '&numberposts=' . $max_articles . '&tag=' . $tags_string); if ($tag_related_posts) { foreach ($tag_related_posts as $related_post) { $cnt++; echo '<div class="child-' . $cnt . '">'; echo '<a href="' . get_permalink($related_post->ID) . '">'; echo get_the_post_thumbnail($related_post->ID); echo $related_post->post_title . '</a>'; echo incomplete_cat_list; echo '</div>'; } } // Only if there's not enough tag related articles, // we add some from the same category if ($cnt < $max_articles) { $article_categories = get_the_category($post->ID); $category_string = ''; foreach($article_categories as $category) { $category_string .= $category->cat_ID . ','; } $cat_related_posts = get_posts('exclude=' . $post->ID . '&numberposts=' . $max_articles . '&category=' . $category_string); if ($cat_related_posts) { foreach ($cat_related_posts as $related_post) { $cnt++; if ($cnt > $max_articles) break; echo '<div class="child-' . $cnt . '">'; echo '<a href="' . get_permalink($related_post->ID) . '">'; echo get_the_post_thumbnail($related_post->ID); echo $related_post->post_title . '</a>'; echo incomplete_cat_list; echo '</div>'; } } } echo '</div>'; ?> 

Как вызвать пользовательскую функцию из функции.php внутри цикла выше?

Сначала вам нужно передать post_id этой функции, чтобы использовать post_id внутри get_the_category($post_id)

 function incomplete_cat_list($post_id = '') { global $post; $post_id = ($post_id) ? $post_id : $post->ID; $first_time = 1; $categories = get_the_category($post_id); foreach($categories as $category) { if ($category->cat_name != 'Category Name') { if ($first_time == 1) { echo '<a class="cat-list" href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "See all %s" ), $category->name ) . '" ' . '>' . $category->name.'</a>'; $first_time = 0; } else { } } } } 

Эта функция уже echo поэтому вам не нужно повторять ее снова. Поэтому вы должны назвать это так.

 incomplete_cat_list($related_post->ID); 

Другое дело, если вы хотите остановить цикл после получения первой категории вместо этой переменной $first_time просто используйте break; для остановки цикла.

@Shibi, для вашего совета об использовании break – вот как должна выглядеть функция?

 // Exclude category name from carousel function incomplete_cat_list($post_id = '') { global $post; $post_id = ($post_id) ? $post_id : $post->ID; $categories = get_the_category($post_id); foreach($categories as $category) { if ($category->cat_name != 'Category name') { echo '<a class="cat-list" href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "See all in %s" ), $category->name ) . '" ' . '>' . $category->name.'</a>'; break; } } }