Truy vấn bài viết từ nhiều trang web trong một mạng?


8

Tôi nhận ra rằng đã có một vài câu hỏi nhảy xung quanh giải pháp mà tôi đang theo đuổi nhưng tôi tin rằng tôi đang tìm kiếm một cái gì đó cụ thể.

Đây thực sự là một câu hỏi gồm hai phần:

1) Mục tiêu của tôi là để wordpress hoạt động ở chế độ mạng (nhiều trang) và tôi đang cố gắng tìm ra cách để "nhóm" các trang web cụ thể lại với nhau. Tôi biết về plugin "Đa mạng" nhưng tôi tự hỏi liệu đây có phải là cách tiếp cận tốt nhất cho việc này không? Chìa khóa ở đây là cho phép người dùng cụ thể thêm / chỉnh sửa các trang web trong mạng phụ của họ.

2) Đây là câu hỏi chính của bài đăng này ... Tôi muốn biết cách tiếp cận tốt nhất cho phép tôi truy vấn các bài đăng từ trong "mạng con" này của các trang web. Vì vậy, ví dụ: nếu có 10 trang web trong mạng phụ này và mỗi trang trong số họ đã tạo các bài đăng trong một loại bài đăng tùy chỉnh được gọi là "tin tức" thì tôi muốn khả năng hiển thị ví dụ 10 bài đăng được xuất bản gần đây nhất từ ​​bộ sưu tập 10 này các trang web.

LƯU Ý: Tôi cần khả năng có thể tạo nhiều mạng con, điều đó có nghĩa là một truy vấn của "tin tức" được công bố mới nhất chỉ có thể hiển thị các bài đăng từ những người thuộc nhóm chính xác.

Cuối cùng - tôi nhận ra các giải pháp tồn tại để làm những thứ như thế này nhưng tôi đang tìm cách tiếp cận tốt nhất cho cả hai trường hợp đòi hỏi số lượng tải / truy vấn cơ sở dữ liệu HẤP DẪN nhất. Tôi cũng rất muốn thực hiện điều này thông qua mã trong tệp tin.php. Thay vì cài đặt các plugin tạo ra sự phình to.

Tôi rất cởi mở với bất kỳ đề xuất và đánh giá cao bất kỳ phản hồi.

Câu trả lời:


7

Tôi biết bạn nói rằng bạn không nên cài đặt trình cắm, nhưng đó chính xác là những gì bạn muốn làm trong tình huống này. Đặt mã trong functions.phptệp của chủ đề yêu cầu bạn sử dụng cùng một chủ đề trên tất cả các trang web trong mạng phụ hoặc duy trì nhiều bản sao của cùng một tệp. Mặt khác, bạn có thể tạo một trình cắm đơn giản cho mạng để đóng gói chức năng, sau đó kích hoạt nó trên mạng và ngay lập tức có chức năng có sẵn chỉ với một tệp để duy trì. Điều này thực sự sẽ tạo ra ít phình to hơn tùy thuộc vào các functions.phptập tin của bạn .

Điều cần lưu ý ở đây là bạn sẽ cần phải lặp qua từng trang trên mạng để tìm bài đăng của mình hoặc thực hiện truy vấn tùy chỉnh. Tôi chọn tham gia thói quen thứ hai bởi vì, mặc dù nó phức tạp hơn một chút, nhưng đó là một truy vấn duy nhất thay vì một truy vấn khác nhau cho mỗi blog.

Về cơ bản ... bạn sẽ cần phải làm như sau:

  1. Lấy danh sách tất cả các ID blog trong mạng / mạng phụ. Nếu sử dụng cài đặt vanilla, điều này có thể được tìm thấy trong wp_blogsbảng. Chỉ cần thực hiện một SELECTtruy vấn đơn giản để tải lên một mảng, sau đó bạn có thể lặp qua để thêm từng blog vào truy vấn chính của mình.
  2. Tạo một vòng lặp thêm mỗi blog vào một truy vấn lớn. Bạn sẽ cần phải kết JOINhợp các bảng với nhau và tìm kiếm dựa trên blog_id(từ wp_blogs), post_id(từ wp_BLOG_posts) và phân loại tùy chỉnh.

Như tôi đã nói, đó không phải là một giải pháp đơn giản (câu lệnh SQL sẽ rất phức tạp và tôi không có thời gian để hack nó ngay bây giờ), nhưng nó sẽ là một câu lệnh duy nhất thực hiện được tất cả công việc.

Hoặc ...

  1. Lấy một danh sách các ID blog và lưu trữ nó trong một mảng.
  2. Lặp lại thông qua mảng của bạn truy vấn từng blog trong mạng và nối thêm các kết quả khớp của bạn (các bài đăng có thuật ngữ phân loại nhất định) vào một mảng riêng.

Với phương pháp thay thế, bạn sẽ phải chạy một truy vấn riêng cho mỗi blog trong mạng. Nếu mạng của bạn là 10-20 trang thì đây không phải là vấn đề quá lớn. Nếu mạng của bạn là 200-500 trang web, bạn sẽ gặp một số vấn đề về hiệu suất để bắt đầu cắt xén.

Ngoài ra, bạn nên lưu trữ kết quả của truy vấn nếu có thể. Nếu nó đang được chạy trên nhiều tải trang (nghĩa là đối với tiện ích thanh bên được chia sẻ trên mạng) thì bạn chỉ muốn chạy truy vấn khi có dữ liệu mới. Mặt khác, cung cấp các kết quả được lưu trong bộ nhớ cache để bạn không làm chậm mạng.


Cám ơn phản hồi của bạn. Tôi thích ý tưởng của bạn về việc thực hiện nó thông qua truy vấn sql tùy chỉnh vì tôi cho rằng điều này sẽ tạo ra ít tải hơn. Điều tôi hy vọng là bạn có thể chỉ cho tôi những plugin nào bạn sẽ sử dụng để tạo các mạng con này có thể có các trang web được liên kết với chúng và hy vọng khi bạn có thời gian truy vấn sql mà người ta sẽ phải sử dụng để tự động truy vấn tất cả các bài đăng trong các trang web được chỉ định mạng phụ. Tôi đánh giá rất cao thời gian của bạn
NetConstructor.com 7/10/2016

3
Nếu có thể, vui lòng cập nhật
NetConstructor.com

1

Tôi đã có một vấn đề tương tự. Tôi cần có một danh sách các bài đăng trên tất cả các trang mạng được sắp xếp theo nhận xét (để hiển thị các bài đăng phổ biến nhất). Đây là chức năng mà tôi đã sử dụng.

Cơ sở là trước tiên, nó nhận được một danh sách tất cả các id blog trong mạng của bạn. Sau đó, nó xây dựng một truy vấn lớn (sử dụng UNION để kết hợp tất cả các hàng và không yêu cầu THAM GIA xấu xí) để có kết quả chứa các cột blog_id, ID và comment_count. Sử dụng điều đó, sau đó tôi sử dụng get_blog_post () để có được từng bài viết thông tin chi tiết.

Có một số dòng gỡ lỗi mà bạn có thể sử dụng tại các điểm khác nhau để xem những gì đang xảy ra.

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;

}


-1

Bạn chắc chắn cần một plugin mạng nhiều trang. Hiện tại có ba lựa chọn: hai trả phí, một miễn phí.

Từ đó, bạn có thể sử dụng một cái gì đó như plugin thẻ sitewide để kéo bài lên blog chính trong mỗi mạng.

Cả hai điều này đều không thể (hoặc nên) được thực hiện từ tệp chức năng của một chủ đề.


những người trả tiền bạn đang đề cập đến là gì?
NetConstructor.com


1
và đã thanh toán: (của tôi) wpebooks.com/networks
andrea_r

-3

xây dựng một công cụ tìm kiếm google tùy chỉnh google.com/cse chỉ định tất cả các trang web bạn muốn tìm kiếm

nhúng nó vào trang web của bạn


@mirelle - nhưng đây không phải là câu trả lời mà tôi đang tìm kiếm
NetConstructor.com
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.