WordPress域名搜索表单输入值无法传递到action链接domainToCheck参数
问题根因
- PHP是服务端执行的语言,在短代码渲染输出表单到浏览器的时候,用户还没有在输入框填写任何内容,
$_POST["domaininput"]此时根本不存在,自然无法提前拼接到action链接里。 - 之前尝试改为get方法不生效的原因是:get方法只会把表单参数加到action域名后的根路径参数里,不会自动识别并拼接到action参数中内嵌的godaddy查询地址的
domainToCheck字段内。
可行解决方案(直接替换原有短代码即可)
function domain_search_box(){ global $wp; $current_slug = add_query_arg( array(), $wp->request ); $current_url = home_url( add_query_arg( array(), $wp->request ) ); if($current_slug == "") { $current_slug = $current_url; } // 基础表单先不拼接domainToCheck,留到前端JS提交时动态处理 $result = '<form class="form-wrapper cf" id="domain-search-form" action="https://www.kqzyfj.com/click-5628080-11774111?aid=11774111&pid=5628080&sid='.esc_attr($current_slug).'&url=https://www.godaddy.com/domains/searchresults.aspx?checkAvail=1/" method="post"> <input name="domaininput" id="domaininput" type="text" placeholder="Search for a Domain" required> <button type="submit">Search</button> </form> <script> // 监听表单提交事件,动态拼接输入值到目标参数 document.getElementById("domain-search-form").addEventListener("submit", function(e){ const inputVal = document.getElementById("domaininput").value.trim(); if(inputVal){ let baseAction = this.action; this.action = baseAction.replace("checkAvail=1/", "domainToCheck=" + encodeURIComponent(inputVal) + "&checkAvail=1/"); } }); </script>'; return $result; } add_shortcode( 'domain_search_box', 'domain_search_box' );
方案说明
- 保留原有post提交逻辑,联盟的sid、pid等溯源参数不会丢失
- 用
encodeURIComponent处理用户输入值,避免特殊字符导致URL解析错误 - 新增
esc_attr处理slug输出,避免XSS安全风险,符合WordPress官方编码规范
内容的提问来源于stack exchange,提问作者Rene Zammit
相关产品推荐
相关产品推荐

