将函数结果设置为变量

时间:2016-06-07 12:58:13

标签: php wordpress function variables

我正在使用此代码获取已在当前类别中发布的所有作者名字:

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。

无论如何,我正在尝试创建一个以逗号分隔的作者名字列表的变量,以便我可以在其他地方使用它。

我该如何解决这个问题?

干杯。

2 个答案:

答案 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;
?>