web-dev-qa-db-fra.com

Comment commander par ID de blog dans cette fonction personnalisée 'List Blogs' multisite

J'ai trouvé cette fonction vraiment intéressante pour répertorier tous les blogs sur un réseau multisite.

Parce que la fonction originale de la liste des blogs multisites était dépréciée: /


J'utilise donc cette fonction ci-dessous, ce qui est génial, car elle est très flexible.

Mais la seule chose que je n'arrive pas à comprendre, c'est comment réorganiser la requête get_results. Quelqu'un peut-il m'aider à comprendre comment réorganiser cette requête par ID de blog, au lieu de l'ordre alphabétique actuel?.


function projects_menu($link_self = true)
{
    global $wpdb;
    echo '<ul class="nav nav-list">';

    $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>';
}


Source de ces fonctions https://Gist.github.com/davejamesmiller/1966341


Merci d'avance.


Voir cela devrait fonctionner mais ne ...

$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
        ORDER BY blog_id
    ");

// EVENTS SITEMAP
function projects_menu_entry($id, $title, $link_self)
{
    global $blog_id;
    if ($link_self || $id != $blog_id) {
        if ($id == $blog_id) {
            echo '<li class="active">';
        } else {
            echo '<li>';
        }
        $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. YMMV.
            $url .= '/';
        }
        echo '<a class="notranslate" href="' . $url . '"><i class="icon-folder-close"></i> ' . $title . '</a>';
        echo '</li>';
    }
}
function projects_menu($link_self = true)
{
    global $wpdb;
    echo '<ul class="nav nav-list">';
    echo '<li class="nav-header">Admin sitemap</li>';

    $query = "
    SELECT blog_id
    FROM $wpdb->blogs
    WHERE site_id = %d
       AND public   = '1'
       AND archived = '0'
       AND mature   = '0'
       AND spam     = '0'
       AND deleted  = '0'
       AND blog_id != '1'
    ORDER BY blog_id ASC";
    $blogs = $wpdb->get_col( $wpdb->prepare( $query, $wpdb->siteid ) );

    $sites = array();
    foreach ($blogs as $blog) {
        $sites[$blog->blog_id] = get_blog_option($blog->blog_id, 'blogname');
    }

    foreach ($sites as $blog_id => $blog_title) {
        projects_menu_entry($blog_id, $blog_title, $link_self);
    }

    projects_menu_entry(1, 'Home', $link_self);

    echo '</ul>';

}

Veuillez voir ci-dessus ma fonction '' essayer '' de répertorier tous les blogs sur mon site réseau et de montrer ce qui est actuellement consulté en ayant une classe active.

Mais le code ci-dessus ne renvoie qu'un site. Et le lien à la maison.

2
Joshc

La requête suivante fonctionne. Notez les guillemets dans AND blog_id != '1'

global $wpdb;
$query = "
SELECT blog_id
FROM $wpdb->blogs
WHERE site_id = %d
    AND public   = '1'
    AND archived = '0'
    AND mature   = '0'
    AND spam     = '0'
    AND deleted  = '0'
    AND blog_id != '1'
ORDER BY blog_id ASC";
$blogs = $wpdb->get_col( $wpdb->prepare( $query, $wpdb->siteid) );

Résultat dans un multi-site avec trois sites:

blogs = array (
  0 => '2',
  1 => '3',
)
1
fuxia