来自其他WordPress网站的搜索结果

时间:2014-05-20 作者:user2586153

我想知道,假设两个网站都不是multisite的一部分,是否可以从网站A获取搜索结果并将其显示到网站B?

3 个回复
最合适的回答,由SO网友:Matt Royal 整理而成

是的,这是可能的。

我建议您将WordPress网站搜索与Google搜索相结合,然后您可以指定当用户在您当前的站点(站点a)上执行搜索时您希望搜索的站点(在您的事业站点B中)

下面是一个很棒的简单教程a-z教程,介绍如何设置所有内容:http://www.wpbeginner.com/wp-tutorials/how-to-add-google-search-in-a-wordpress-site/

好运:-)

SO网友:Sisir

当您可以访问这两个站点时。您可以创建一个数据馈送url,该url将返回JSON 数据

提供数据馈送的插件(安装在站点A上)

<?php
/*
Plugin Name: WPSE Search Data Feed
Plugin URI: http://wordpress.stackexchange.com
Description: Provides interface to search and get result in JSON data
Author: Sisir
Version: 1.0
Author URI: http://developerpage.net
*/

    add_action(\'wp_ajax_nopriv_wpse144893_search\', \'wpse144893_search_data\'); // allow logged out users
    add_action(\'wp_ajax_wpse144893_search\', \'wpse144893_search_data\'); // allow logged in users

    function wpse144893_search_data(){

        $errors = array();
        $data = array(
            \'status\' => \'error\',
            \'message\' => \'\',
            \'result\' => array()
        );

        if(!isset($_REQUEST[\'term\']) || empty($_REQUEST[\'term\']))
            $errors[] = \'No search term given!\';


        if(!isset($_REQUEST[\'limit\']) || empty($_REQUEST[\'limit\']))
            $limit = 10;
        else
            $limit = (int) $_REQUEST[\'limit\'];

        if(empty($errors)){

            $term = sanitize_text_field($_REQUEST[\'term\']);

            // setup query data
            $args = array(
                \'posts_per_page\' => $limit,
                \'s\' => $term
            );

            $query = new WP_Query($args); // run query

            $results = array();
            if($query->have_posts()): while($query->have_posts()): $query->the_post();
                $post_item = array(
                    \'title\' => get_the_title(),
                    \'excerpt\' => get_the_excerpt(),
                    \'permalink\' => get_permalink()
                );
                $results[] = $post_item;
            endwhile;
                $data[\'status\'] = \'success\';
                $data[\'message\'] = \'Results found!\';
                $data[\'result\'] = $results;
            else:
                $errors[] = \'No post found!\';
                $data[\'message\'] = $errors;
            endif;
        }

        echo json_encode($data); // print json

        die(); // kill the script
    }

Link to Gist

返回的结果如下:

{
   "status":"success",
   "message":"Results found!",
   "result":[
        {
            "title":"Deadly car bomb blasts hit Shia areas in Baghdad",
            "excerpt":"Several car bombs have exploded across the Iraqi capital Baghdad, killing at least 20 people and injuring scores more, officials say. The attacks are reported to have targeted mainly Shia areas in the city. Security sources told the BBC three explosions rocked the neighbourhoods of Ourfally, Kiyara and Falah Street in the eastern suburb of […]",
            "permalink":"http:\\/\\/localhost\\/l\\/blog\\/deadly-car-bomb-blasts-hit-shia-areas-in-baghdad\\/"}
            ]
    }
解释我们使用ajax api创建一个数据提要。无需致电admin-ajax.php 使用ajax的文件。我们可以使用简单的HTTP\\U API来实现这一点或CURL。我们获取搜索结果的url端点是http://<your_domain.com>/wp-admin/admin-ajax.php?action=wpse144893_search

从验证代码中可以看到。您将搜索词传递为term 钥匙你也可以通过limit 不需要,默认为10. 以下是搜索词的外观。

http://<your_domain.com>/wp-admin/admin-ajax.php?action=wpse144893_search&term=<my_search>&limit=50
您只需将url粘贴到浏览器上即可查看结果。这是一个给你一个想法的基本插件。

通过重写api,可以对插件的自定义/漂亮url端点进行改进JSON 但你可以回来XML 如果你觉得舒服的话

    如何从站点B调用,正如您所看到的,url非常简单。因此,您可以使用HTTP_API 或php curl来获得结果。下面是如何使用HTTP_API

    $url = \'http://<your_domain.com>/wp-admin/admin-ajax.php\';
    $args = array(
        \'action\' => \'wpse144893_search\',
        \'term\' => \'My Search Term\',
        \'limit\' => 50
    );
    
    $url = add_query_arg($args, $url);
    
    $response = wp_remote_get($url);
    
    if(!is_wp_error($response)){
        // additional checks can be done here for correct http code.
        $body = wp_remote_retrieve_body($response); // retrieve the response body
    
        $result = json_decode($result); // now we get the result object :)
    }else{
        // handle error
    }
    
    现在您可以处理$result 对象以获取搜索结果。

SO网友:Ahrengot

以下代码将从我的网站加载JavaScript的搜索结果

$response = wp_remote_get( "http://ahrengot.com/?s=javascript" );
$body = wp_remote_retrieve_body( $response );
echo $body;
这将以字符串形式返回HTML,如果要隔离搜索结果,可以使用RegEx或搜索/替换字符串。但是,我建议改用jQuery执行此操作,原因有二:

上面的示例很可能会减慢页面加载速度,因为它必须先完全加载另一个页面,然后才能将HTML发送回客户端。使用AJAX加载将立即显示页面,然后第二次加载结果。这是一种更好的用户体验下面是与jQuery相同的示例

$("#you-container-element").load( "http://ahrengot.com/?s=javascript #container-element" );
#container-element 是ahrengot上的元素。com/包含搜索结果的远程页面。

结束

相关推荐

add_rewrite_rule to search

新手WordPress开发者。我需要像这样映射WordPress URLwww.example.com/user/Username 基于该用户名的搜索结果我已经有了使用url进行搜索的页面www.example.com/search-results/?name=Username在functions.php 我有add_action( \'init\', \'add_username_rules\' ); function add_username_rules() { glo