Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Wordpress插件选项页面搜索_Php_Search_Wordpress - Fatal编程技术网

Php Wordpress插件选项页面搜索

Php Wordpress插件选项页面搜索,php,search,wordpress,Php,Search,Wordpress,我正在构建一个Wordpress插件,并希望在我的选项页面中添加一个帖子搜索字段。我试图使用添加标准WP搜索表单,但当我单击“提交”时,我被重定向到“常规”设置页面。如何在我的插件选项页面中实现一个搜索表单,并让它返回同一页面的帖子列表?如果可能的话,我希望不使用AJAX。post列表标记非常复杂,使用JS实现它并不理想 我还试图复制“Posts”页面上的搜索表单HTML。这导致了同样的问题——被重定向到“常规”设置页面 输入文本框必须包含在表单中。这里是一个默认的html5表单。用这个替换代码

我正在构建一个Wordpress插件,并希望在我的选项页面中添加一个帖子搜索字段。我试图使用
添加标准WP搜索表单,但当我单击“提交”时,我被重定向到“常规”设置页面。如何在我的插件选项页面中实现一个搜索表单,并让它返回同一页面的帖子列表?如果可能的话,我希望不使用AJAX。post列表标记非常复杂,使用JS实现它并不理想


我还试图复制“Posts”页面上的搜索表单HTML。这导致了同样的问题——被重定向到“常规”设置页面

输入文本框必须包含在表单中。这里是一个默认的html5表单。用这个替换代码,然后修复样式

<form role="search" method="get" class="search-form" action="<?php echo home_url( '/' ); ?>">
    <label>
        <span class="screen-reader-text"><?php echo _x( 'Search for:', 'label' ) ?></span>
        <input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Search …', 'placeholder' ) ?>" value="<?php echo get_search_query() ?>" name="s" title="<?php echo esc_attr_x( 'Search for:', 'label' ) ?>" />
    </label>
    <input type="submit" class="search-submit" value="<?php echo esc_attr_x( 'Search', 'submit button' ) ?>" />
</form>

我不想使用AJAX来实现这一点,但最终不得不这么做。我提出的解决方案是使用AJAX生成“重定向”URL,并使用
add\u query\u arg()
附加查询参数,然后返回带有查询参数的URL,并使用
window.location.href
重定向用户。页面被重定向,并附加查询参数,然后在页面加载
WP_query()
与包含查询参数的
s=
参数一起运行

也许不是最有效的方法,甚至不是正确的方法,但它能完成任务。如果有人有别的解决办法,我很乐意听听

PHP函数示例:

public function user_redirect_by_search() {
    $search_arr = array();

    parse_str($_POST['search_data'], $search_arr);

    $return = array();
    $post_type_arr = array();
    $post_type_count = 0;
    foreach($search_arr['post_type'] as $post_type) {
        $post_type_count++; 
        $post_type_arr[$post_type_count] = $post_type;
    }

    $redirect_url = add_query_arg( array('post_type' => implode(",", $post_type_arr), 'keywords' => $search_arr['s']),  $search_arr['page_url']);

    $return['status'] = 1;
    $return['redirect_url'] = $redirect_url;

    echo json_encode($return);
    die();
}
然后是jQuery:

// Post keyword search
    jQuery('#searchform').on('submit', function(e) {
        e.preventDefault();

        var search_data = jQuery(this).serialize();

        jQuery.ajax({
            type: "POST",
            url: ajaxurl,
            dataType: 'json',
            data: {"action": "user_search", search_data},
            success: function(data) {
                if(data.status == 1) {
                    window.location.href = data.redirect_url;
                    //console.log(data);
                } else {
                    alert("Oops, an error occurred. Please try again or contact the plugin developer.");
                    console.log(data);
                }
            }
        });
    });

请注意,上面的代码没有投入生产使用,它只是编写/修改以显示手边问题的示例解决方案。

抱歉,这完全没有帮助。显然,表单必须包含在表单元素中,在操作中使用
home\u url()
会将我重定向到站点的前端。如问题中所述,我需要停留在提交表单的同一选项页的仪表板上。您是否希望在管理面板(选项页)中实现搜索功能?