此函数生成的短代码(多站点中所有站点的列表)输出到循环中内容的上方,无论它放置在编辑器中的何处。
我已经查看了WPSE上的其他相关问题和答案,并意识到这与使用echo
而不是return
, 但这并不像替换echo
具有return
在下面的函数中。或添加echo=0
具有WP功能,如wp_list_pages()
有什么想法吗?需要返回而不是回显的函数在哪里?
// Output a single menu item
function projects_menu_entry($id, $title, $link_self)
{
global $blog_id;
if ($link_self || $id != $blog_id) {
echo \'<li>\';
if ($id == $blog_id) {
echo \'<strong>\';
}
$url = get_home_url($id);
if (substr($url, -1) != \'/\') {
// Note: I added a "/" to the end of the URL because WordPress
// wasn\'t doing that automatically in v3.0.4
$url .= \'/\';
}
echo \'<a href="\' . $url . \'">\' . $title . \'</a>\';
if ($id == $blog_id) {
echo \'</strong>\';
}
echo \'</li>\';
}
}
// Output the whole menu
// If $link_self is false, skip the current site - used to display the menu on the homepage
function projects_menu($link_self = true)
{
global $wpdb;
echo \'<ul>\';
projects_menu_entry(1, \'Home\', $link_self);
$blogs = $wpdb->get_results("
SELECT blog_id
FROM {$wpdb->blogs}
WHERE site_id = \'{$wpdb->siteid}\'
AND spam = \'0\'
AND deleted = \'0\'
AND archived = \'0\'
AND blog_id != 1
");
$sites = array();
foreach ($blogs as $blog) {
$sites[$blog->blog_id] = get_blog_option($blog->blog_id, \'blogname\');
}
natsort($sites);
foreach ($sites as $blog_id => $blog_title) {
projects_menu_entry($blog_id, $blog_title, $link_self);
}
echo \'</ul>\';
}
// Adds a [bloglist] shortcode
function bloglist_shortcode($atts)
{
projects_menu(false);
}
add_shortcode(\'bloglist\', \'bloglist_shortcode\');