web-dev-qa-db-ja.com

このマルチサイトの「ブログ一覧」カスタム機能でブログIDで注文する方法

私は、マルチサイトネットワークインストール上のすべてのブログを一覧表示するための、この本当に素晴らしい機能を見つけました。

元の マルチサイトリストブログ機能 が廃止されたため、/


それで私はそれがとても柔軟であるので素晴らしいです以下のこの機能を使っています。

しかし、私が解決できないように見える唯一のことは、get_resultsクエリを並べ替える方法です。現在出力されているアルファベット順ではなく、ブログIDでこのクエリを並べ替える方法を理解するのを手伝ってください。


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


この関数の出所 https://Gist.github.com/davejamesmiller/1966341


前もって感謝します。


これはうまくいくはずだがうまくいかない….

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

}

私のネットワークサイト上のすべてのブログをリストアップしようとしている現在の機能を見て、現在アクティブなクラスを持っていることによって見ているものを見てください。

しかし、上記のコードは1つのサイトを返すだけです。そしてホームリンク。

2
Joshc

次のクエリは機能します。 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) );

3つのサイトを持つマルチサイトになります。

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