根据用户输入在WordPress中调用外部API

时间:2021-07-05 作者:Vyom

我想创建一个简单的wordpress网站,在其中我想在页面上显示一个搜索框。在文本/搜索框中搜索字符串时,应基于该字符串进行外部API调用,并向用户显示API返回的数据。到目前为止,我已成功从以下URL引用代码-https://rapidapi.com/blog/integrate-external-api-wordpress/.

但我无法根据文本框中传递的字符串调用API。我在子主题文件页面中完成了以下代码:-

<div id="primary" <?php generate_do_element_classes( \'content\' ); ?>>
    <main id="main" <?php generate_do_element_classes( \'main\' ); ?>>
        <form action="" method="post">
        Enter query:
        <input type=text name="t1">
        <br>
        <br>
        <input type=submit name="s">
        <?php
        /**
         * generate_before_main_content hook.
         *
         * @since 0.1
         */
        do_action( \'generate_before_main_content\' );

        if(isset($_POST[\'s\'])){
        echo "good";    
        $curl = curl_init();

        curl_setopt_array($curl, [
            CURLOPT_URL => "******API URL*****/".$_POST[\'t1\'],
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "GET",
            CURLOPT_HTTPHEADER => [
                "x-rapidapi-host: XYZ",
                "x-rapidapi-key: ABc"
            ],
        ]);

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) {
            echo "cURL Error #:" . $err;
        } else {
            echo $response;
        }
    }
                

        /**
         * generate_after_main_content hook.
         *
         * @since 0.1
         */
        do_action( \'generate_after_main_content\' );
        ?>
        </form>
    </main>
</div>

<?php
/**
 * generate_after_primary_content_area hook.
 *
 * @since 2.0
 */
do_action( \'generate_after_primary_content_area\' );

generate_construct_sidebars();

get_footer();
当我点击提交按钮时,它会显示“未找到页面”。

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

s 是保留关键字,不能重用WordPress本身使用的URL参数和查询变量。此问题与API请求代码无关。

因为您的表单有一个名为s, 该请求被解释为搜索请求。由于在WordPress搜索中没有找到帖子,您得到了404回复。

一般来说,如果文档中列出的参数在WP_Query post query对象,无法在URL中使用。

更改WordPress以允许s 要使用将削弱WordPress的大部分核心功能,需要对WordPress本身进行广泛的内部修改,并禁用所有与搜索相关的功能,以及在前端和WP Admin中使用类似系统的任何插件。

相关推荐

WP_REMOTE_GET-CURL错误28-仅在相同域上

在我的网站上我使用wp_remote_get 从mydomain获取数据。com/wp-json/wp/v2/pages/75当我在本地主机上运行它时,它工作得很好,但在发送到生产服务器(mydomain.com)后,突然出现了错误:\'cURL error 28: Operation timed out after 5000 milliseconds with 0 bytes received’ + VPS开始表现得疯狂(100%的cpu使用率和内存)。It can’t retrieve data f