多站点Foreach循环仅返回一个结果

时间:2021-12-27 作者:TechieBoy

我有一个由10个站点组成的subdir多站点设置,其中我在所有站点中都维护了类似的Url结构,用于自定义帖子,如partoftheurl-in-country (主站点除外)对于主站点partoftheurl 只有到目前为止一切正常。

现在,我需要创建一个自定义函数,该函数返回网络中当前url的所有匹配url的数组。我已经这样做了,但只返回任何一个站点!谁能告诉我哪里出了问题。

 function rel_alternate_network(){
    global $post;
    $slugX = is_main_site() ? $post->post_name : rtrim($post->post_name, \'-in-\'.strtolower(do_shortcode(\'[country]\')));
    $urls = array();
    foreach(get_sites() as $site){
        if( $site->blog_id == get_current_blog_id()) {continue;}
            switch_to_blog($site->blog_id);
            $slugY = get_post_by_slug($slugX);
            $urls[\'site\'] = $site->path;
            $urls[\'slug\'] = $slugY->post_name;
            restore_current_blog();
    }
    return $urls;
}
注:get_post_by_slug() 是我创建的自定义函数,工作正常;还有一个短代码[country] 创建的,返回url中的国家名称。

1 个回复
最合适的回答,由SO网友:Pat J 整理而成

每次通过foreach() 循环,您正在擦除$urls 大堆

尝试以下操作:

 function rel_alternate_network(){
    global $post;
    $slugX = is_main_site() ? $post->post_name : rtrim($post->post_name, \'-in-\'.strtolower(do_shortcode(\'[country]\')));
    $urls = array();
    foreach(get_sites() as $site){
        if( $site->blog_id == get_current_blog_id()) {continue;}
            switch_to_blog($site->blog_id);
            $slugY = get_post_by_slug($slugX);
            $new_url[\'site\'] = $site->path;
            $new_url[\'slug\'] = $slugY->post_name;
            $urls[] = $new_url; // Adds the new URL to the URLs array.
            restore_current_blog();
    }
    return $urls;
}

相关推荐

retrieve post details in loop

我编写了一个函数来循环浏览用户的帖子,我试图按状态显示每个帖子,并为每个状态组显示不同的消息。出于某种原因-get\\u post\\u status不起作用,其他任何挂钩也不起作用。有人能帮忙吗?我甚至试着暂时缩短函数,只是回显变量,看看它们在做什么,它只是空白。function user_item($type, $tax, $term_name, $term_id) { if (!is_user_logged_in()) return; $args = array(