搜索多个 Wordpress 站点 post

Searching through multiple Wordpress site post

我们有多个 Worpdress 博客网站(20 多个网站),每个网站都在自己的域中,现在我们已经开始创建一个主网站,我们想添加一个搜索功能/栏,访问者可以在其中执行在主站点上搜索,然后它将 return 所有 post 匹配其搜索的结果。从那以后,如果他们单击列出的 post,他们将转到相关博客站点上的 post,因此不需要为 post 在主站点。

到目前为止,我的想法是使用 WordPress Rest API 和“wp_remote_get”功能来完成此操作,但是当博客站点数量增加时,搜索速度存在一些问题和安全。

将所有博客移动到单个站点或多站点设置不是一个选项,因为我希望能够在需要时将站点移动到其他主机的选项。

所以我想知道是否有人知道处理项目的更好方法。

根据您的想法,我认为从其他站点获取的 api 更好。 但是那时有一些背部问题。

一世。如果一个网站宕机,那么它不会响应
二.用户可以不断地在您的站点上搜索以从其他站点获取数据。这会降低你的速度。
三.合并 20 多个网站是一个很大的问题。因为您必须接触每个远程站点才能设置 api response

为了解决问题,您可以制作另一个站点,该站点将收集数据并将其保存在他的数据库中,并根据要求做出响应。在您的主机中制作一些脚本来更新客户端站点以更新和同步远程数据

首先,我会尝试在后端处理查询。然后获取每个博客的搜索结果,最后Echo到页面内容。

您还需要找到一个显示搜索结果的 php 文件(在您的活动主题中)。通常是 search.php 或 content-search.php.

<?php
/**
 * The template for displaying search results pages
 *
...

$query=get_search_query();

$args = array( 's' => $query );

$the_query = new WP_Query( $args );

$posts = $the_query->posts;

foreach($posts as $post) {
    // Echo some info
    // echo $post->post_name . '<br>';
}

这将显示当前博客的结果。因此,您需要切换到每个博客并获取其针对相同查询的帖子 ($query=get_search_query()).

https://developer.wordpress.org/reference/functions/get_sites/

https://developer.wordpress.org/reference/functions/switch_to_blog/

$sites = get_sites();
    foreach ( $sites as $site ) {
        switch_to_blog( $site->blog_id );

                $query=get_search_query();
    
                $args = array( 's' => $query );
    
                $the_query = new WP_Query( $args );
    
                $posts = $the_query->posts;
    
                foreach($posts as $post) {
                   // Echo some info
                  // echo $post->post_name . '<br>';
                 }
        restore_current_blog();
    }

UPD:是的,这仅适用于 wp 多站点。这是单独站点的选项

当您在站点中搜索内容时,基本上,您会发出 GET 请求:

https://your-wp-site.com/?s=QUERY_STRING&submit=Search

因此,您可以使用 js 发出 Ajax GET 请求 ?s=QUERY_STRING&submit=搜索每个域。然后解析结果插入到内容中,也是用js。

function loadDoc(url) {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {

     //parsing this.responseText

    var main_content = document.getElementById("main"); /*supposing your main content tag has id='main'*/

    main_content.appendChild(PARSED_ELEMENT_WITH_RESULTS);

    }
  };
  xhttp.open("GET", url, true);
  xhttp.send();
}



var query = window.location.href.split('/')[3]; /*getting query string ?s=QUERY_STRING&submit=Search */

loadDoc("https://site1.com/"+query );

loadDoc("https://site2.com/"+query );

loadDoc("https://site3.com/"+query );

...

最后,将此 javascript 文件添加到搜索页面。