【问题标题】:Wordpress cannot get POST/GET parameters in shortcodeWordpress 无法在简码中获取 POST/GET 参数
【发布时间】:2023-03-05 22:03:01
【问题描述】:

我想根据用户在输入框中输入的内容从数据库中动态查询数据。但似乎短代码无法获取发布/获取参数。还是 Wordpress 不允许手动创建的页面访问 GET/POST? 从图片中可以看出,控制台面板上的帖子失败并且页面也丢失了。如何重定向到当前页面并在短代码中获取发布/获取参数。

页面在没有发布的情况下加载或通过表单提交时有效。

    <?php global $wpdb;
    //$result;
    //$user_par1;
    
    //do_action("init")
    //$result = GetPagePara();
    // $result = $wpdb->get_results( "SELECT Name, Status, ID, Image FROM threatplants");
    // $res = "<div class='table_container'><table>";
    //     foreach ($result as $row) {
    //         $res = $res . "<tr><td>" . $row->Name  . "</td><td>" . $row->Status . "</td><td>". $row->ID . "</td><td>" . '<img src="data:image/jpeg;base64,' . base64_encode($row->Image) . '"/>' .  "</td></tr>";
    //     }
    ?>


  <div class="search-container">
    <form action= "<?php the_permalink(); ?>" method="post">
        <input type="text" placeholder="Search..." name="name" id="name" >
        <button id="search" type="submit" >Submit</button>
    </form>
  </div>
    <div id= "content">

    </div>
    <script type= "text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js">
    </script>
    <script type="text/javascript">
        $(document).ready(function(){
            var content = $("#content");
            var name = $("#name");
            var content = $("#content");
            var name = $("#name");
            <?php
                   //global $post;
                
                    //$result;
                    $user_par1 = $_POST['name'];
                                    //var_dump($user_par1);
                                    //$user_par2 = $_GET['query2'];
                    $user = $wpdb->prepare('lower(CommonName) LIKE %s', $user_par1);

                    //var_dump($user);

                    //$user2 = $wpdb->prepare('AND lower(query2) LIKE %' . '%s' .'%', $user_query2); 
                    if($user_par1!=null || $user_par1!=""){
                        $result = $wpdb->get_results( "SELECT ID, CommonName, Status, Image FROM threatplants WHERE lower(CommonName) LIKE" . $user_par1);
                    }else{
                        $result = $wpdb->get_results( "SELECT ID, CommonName, Status, Image FROM threatplants Limit 9");
                    }
                    //var_dump($result);
                    //var_dump($user_par1);
                    $res = "";
                    $num = count($result);
                    $row = $num/3;
                    if($num%3 != 0){
                        $row += 1;
                    }
                    //
                   
                    $r = 0;
                    $c = 0;
                    while($r < $row){
                        $res .= "<div class='row'>";
                        $card_count = 0;
                        for (; $c < $num and $card_count < 3; $c++) {
                            $res = $res . '<div class="column"> <div class="card">' . '<img width="200" height="200" src="data:image/jpeg;base64,' . base64_encode($result[$c]->Image) . '"/>' . "<label>SPRAT TaxonID: </label>". "<p>". $result[$c]->ID ."</p>" . "<label>Common Name: </label>"."<p>" . $result[$c]->CommonName . "</p>" ."<label>Status: </label>". "<p class='". str_replace(" ", "-", $result[$c]->Status) ."'>". $result[$c]->Status ."</p>" . "</div></div>";
                            $card_count ++;
                        }
                        
                        $res = $res . "</div>";
                        $r++;
                    }
                    
                    ?>

                var res = <?php echo json_encode($res); ?>;
                content.html(res);

                    
                  })
        </script>
    
    <style>
        .Extinct{
            color:red;
        }

        .Endangered {
            color: blue;
        }
        .Critically-Endangered{
            color: yellow;
        }
        .Vulnerable{
            color: green;
        }
                * {
          box-sizing: border-box;
        }

        body {
          font-family: Arial, Helvetica, sans-serif;
        }

        /* Float four columns side by side */
        .column {
          float: left;
          width: 33%;
          padding: 0 10px;
        }

        /* Remove extra left and right margins, due to padding in columns */
        .row {margin: 0 -5px;}

        /* Clear floats after the columns */
        .row:after {
          content: "";
          display: table;
          clear: both;
        }

        /* Style the counter cards */
        .card {
          box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); /* this adds the "card" effect */
          padding: 16px;
          text-align: center;
          background-color: #f1f1f1;
        }

        /* Responsive columns - one column layout (vertical) on small screens */
        @media screen and (max-width: 600px) {
          .column {
            width: 100%;
            display: block;
            margin-bottom: 20px;
          }
        }
    </style>

【问题讨论】:

  • 似乎 name 是一个保留字符串,所以它会将我重定向到页面搜索。但是我改了,还是不行。我发现问题是wordpress重写了我的url所以参数丢失了
  • 有人知道如何禁用重写规则吗?

标签: php wordpress shortcode


【解决方案1】:

首先,避免使用name或其他敏感常用词作为json属性名。否则,您必须配置重写规则。

其次,确保在短代码中添加正确的 Ajax-handleer 函数并使其在任何地方运行,如下所示:

add_action( 'wp_ajax_nopriv_request_plants', 'request_plants' );
add_action( 'wp_ajax_request_plants', 'request_plants' );

function request_plants() {
    global $wpdb;
    $name = $_POST['plant-name'];
    //More operations from db
    echo $res;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    相关资源
    最近更新 更多