Mã ngắn được tạo bởi chức năng này - một danh sách tất cả các trang web trong nhiều trang - xuất ra phía trên nội dung trong vòng lặp, bất kể nó được đặt ở đâu trong trình chỉnh sửa.
Tôi đã xem xét các câu hỏi và câu trả lời liên quan khác trên WPSE và nhận ra rằng nó phải thực hiện với chức năng sử dụng echo
thay vì return
, nhưng không dễ dàng như thay thế các trường hợp echo
bằng return
trong hàm bên dưới. Hoặc thêm echo=0
bằng chức năng WP nhưwp_list_pages()
Có ý kiến gì không? Đâu là chức năng cần được trả về thay vì lặp lại?
// 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');