我正在使用此代码获取已在当前类别中发布的所有作者名字:
function categoryAuthors() {
$category_authors = array();
$args = array(
'posts_per_page' => -1,
'category' => $category,
'post_status' => 'publish'
);
$allposts = get_posts($args);
if ($allposts) {
foreach($allposts as $authorpost) {
$category_authors[$authorpost->post_author]+=1;
}
arsort($category_authors);
foreach($category_authors as $key => $author_post_count) {
$user = get_userdata($key);
$an_author = "'" . $user->first_name . "', ";
echo $an_author;
}
}
}
$theAuthors = categoryAuthors();
echo $theAuthors;
..几乎可以工作,但是,如果我像这样评论回声......
// echo $theAuthors;
...无论如何,所有电子邮件地址都会在我的页面上回显。
我的理解是,在你实际调用它之前不会调用函数,但它似乎被调用(在页面上输出),即使我没有回显$ theAuthors。
无论如何,我正在尝试创建一个以逗号分隔的作者名字列表的变量,以便我可以在其他地方使用它。
我该如何解决这个问题?
干杯。
答案 0 :(得分:3)
将 return()用于功能
function categoryAuthors() {
$an_author = '';
$category_authors = array();
$args = array(
'posts_per_page' => -1,
'category' => $category,
'post_status' => 'publish'
);
$allposts = get_posts($args);
if ($allposts) {
foreach($allposts as $authorpost) {
$category_authors[$authorpost->post_author]+=1;
}
arsort($category_authors);
foreach($category_authors as $key => $author_post_count) {
$user = get_userdata($key);
$an_author .= "'" . $user->first_name . "', ";
}
}
return $an_author;
}
$theAuthors = categoryAuthors();
echo $theAuthors;
答案 1 :(得分:0)
你的函数中没有return语句,这就是为什么当你调用函数时没有返回变量。但是你有一个echo语句,这意味着当你调用函数时它只打印所有的名字。
要修复此问题,请删除每个循环迭代中回显字符串的行,而是构建一个包含所有名称的字符串,然后在函数末尾返回它。
示例:
<?php
function categoryAuthors() {
$category_authors = array();
$names = '';
$args = array(
'posts_per_page' => -1,
'category' => $category,
'post_status' => 'publish'
);
$allposts = get_posts($args);
if ($allposts) {
foreach($allposts as $authorpost) {
$category_authors[$authorpost->post_author]+=1;
}
arsort($category_authors);
foreach($category_authors as $key => $author_post_count) {
$user = get_userdata($key);
$an_author = "'" . $user->first_name . "', ";
//echo $an_author;
$names = "$names, $an_author";
}
}
return $names;
}
$theAuthors = categoryAuthors();
echo $theAuthors;
?>