Запрос сообщений с нескольких сайтов в сети?

Я понимаю, что было несколько вопросов, которые танцуют вокруг моего решения, но я считаю, что ищу что-то конкретное.

Это вопрос двух частей:

1) Моя цель - заставить wordpress работать в режиме сети (многосайтовый), и я пытаюсь найти способ по существу «группировать» определенные сайты вместе. Я знаю о плагине «Multi-Network», но я сомневаюсь, если это лучший подход для этого? Ключевым моментом здесь является предоставление отдельным пользователям возможности добавлять /редактировать сайты в пределах своей собственной подсети.

2) Это ключевой вопрос этой публикации ... Я хотел бы знать лучший подход, который позволил бы мне по существу запрашивать сообщения из этой «подсетей» сайтов. Так, например, если в этой подсетей есть 10 сайтов, и каждый из них создал сообщения в пользовательском типе сообщений, называемом «новостями», тогда мне бы хотелось отобразить, например, 10 последних опубликованных сообщений из этой коллекции из 10 сайты.

ПРИМЕЧАНИЕ. Мне нужна способность создавать многопользовательские подсетей, что, в свою очередь, означает, что запрос последних опубликованных «новостей» может отображать сообщения только из тех, что принадлежат к правильной группе.

Наконец-то я понимаю, что существуют решения для подобных действий, но я ищу наилучший подход к обоим случаям, требующим наименьшего количества загрузки /запросов базы данных. Я также очень хотел бы сделать это с помощью кода в моем файле functions.php, а не устанавливать плагины, которые создают дополнительный вздутие.

Я очень открыт для любых предложений и ценю любой ответ.

8 голосов | спросил NetConstructor.com 4 +04002010-10-04T12:39:14+04:00312010bEurope/MoscowMon, 04 Oct 2010 12:39:14 +0400 2010, 12:39:14

1 ответ


1

У меня была аналогичная проблема. Мне нужно было получить список сообщений по всем сетевым сайтам, отсортированным по комментариям (чтобы показать самые популярные сообщения). Это функция, которую я использовал.

Основой является то, что он сначала получает список всех идентификаторов блога в вашей сети. Затем он создает большой одиночный запрос (используя UNION для объединения всех строк и не требуя уродливых JOIN), который получает результат, содержащий столбцы blog_id, ID и comment_count. Используя это, я затем использую get_blog_post (), чтобы получить информацию о каждом из сообщений.

Есть несколько строк отладки, которые вы можете использовать в разных точках, чтобы увидеть, что происходит.

function txx_top_posts_mu( $howMany = 10 ) {
global $wpdb;
global $table_prefix;

// get an array of the table names that our posts will be in
// we do this by first getting all of our blog ids and then forming the name of the 
// table and putting it into an array
$rows = $wpdb->get_results( "SELECT blog_id from $wpdb->blogs WHERE
    public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0';" );
if ( $rows ) :
    $blogPostTableNames = array();
    foreach ( $rows as $row ) :
        $blogPostTableNames[$row->blog_id] = $wpdb->get_blog_prefix( $row->blog_id ) . 'posts';
    endforeach;
    //print_r($blogPostTableNames);

    // now we need to do a query to get all the posts from all our blogs
    // ordered by the number of comments and with limits applied
    if ( count( $blogPostTableNames ) > 0 ) :
        $query = '';
        $i = 0;
        foreach ( $blogPostTableNames as $blogId => $tableName ) :
            if ( $i > 0 ) :
                $query.= ' UNION ';
            endif;
            $query.= " SELECT ID, comment_count, $blogId as `blog_id` FROM $tableName ";
            $i++;
        endforeach;
        $query.= " ORDER BY comment_count DESC LIMIT 0,$howMany;";
        //echo $query;
        $rows = $wpdb->get_results( $query );

        // now we need to get each of our posts into an array and return them
        if ( $rows ) :
            $posts = array();
            foreach ( $rows as $row ) :
                $posts[] = get_blog_post( $row->blog_id, $row->ID );
            endforeach;
            //print_r($posts);
            return $posts;
        endif;
    endif;
endif;
return false;

}

ответил 15 MarpmTue, 15 Mar 2011 23:11:27 +03002011-03-15T23:11:27+03:0011 2011, 23:11:27

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132