为什么我使用短码调用AJAX LIVE搜索时无法正常工作?

时间:2014-07-11 作者:Reorganize

我终于在Wordpress中实现了实时搜索,但只有在课堂上直接调用它时,它才起作用。

我想把它放在一个短代码中,这样我就可以在我想要的每一页上调用它。但是,当我调用短代码时,我的jquery/ajax不起作用。

Constructor

    add_action( \'wp_ajax_schoenen_zoeken_shortcode_output\', array($this, \'schoenen_zoeken_shortcode_output\'));
    add_action( \'wp_ajax_nopriv_schoenen_zoeken_shortcode_output\', array($this, \'schoenen_zoeken_shortcode_output\'));
    add_action( \'wp_head\', array($this, \'add_js\' ));
    add_action( \'init\', array($this, \'register_schoenen_shortcodes\'));

Javascript:

    public function add_js() {
      ?>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
<script type="text/javascript">
$(function(){
$(".search").keyup(function() 
{ 
var searchid = $(this).val();
var dataString = \'search=\'+ searchid;
if(searchid!=\'\')
{
    $.ajax({
    type: "POST",
    url: "/wp-admin/admin-ajax.php",
    data: dataString,
    cache: false,
    success: function(html)
    {
    $("#result").html(html).show();
    }
    });
}return false;    
});

jQuery("#result").live("click",function(e){ 
    var $clicked = $(e.target);
    var $name = $clicked.find(\'.name\').html();
    var decoded = $("<div/>").html($name).text();
    $(\'#searchid\').val(decoded);
});
jQuery(document).live("click", function(e) { 
    var $clicked = $(e.target);
    if (! $clicked.hasClass("search")){
    jQuery("#result").fadeOut(); 
    }
});
$(\'#searchid\').click(function(){
    jQuery("#result").fadeIn();
});
});
</script>
<?php
}

Shortcode

 public function register_schoenen_shortcodes() {

       add_shortcode(\'schoenen_zoeken\', array($this, \'schoenen_zoeken_shortcode_output\'));

    }

PHP AND HTML

  public function schoenen_zoeken_shortcode_output() {
        global $wpdb;      

        if ($_POST) {
        $q = mysql_real_escape_string($_POST[\'search\']);
        foreach ($wpdb->get_results("SELECT plaatsen FROM wp_plaatsen WHERE plaatsen LIKE \'%$q%\'") as $key => $row) {

            $plaatsnaam = $row->plaatsen;
            $b_plaatsnaam = \'<strong>\'.$q.\'</strong>\';
            $final_plaatsnaam = str_ireplace($q, $b_plaatsnaam, $plaatsnaam);
?>
           <div class="show" align="left">
               <span class="name"><?php echo $final_plaatsnaam; ?></span>
</div>
<?php

        }
   die();

        }

        ?>
<div class="schoen_zoeken_container">
            <div class="schoen_zoeken">
                <form action="" method="POST">
                    <div class="row">
                        <div class="col-lg-12 col-md-12 col-sm-12">

                                <div class="zoeken">
                                <input type="text" class="search" id="searchid" name="search" placeholder="Zoek schoen" />
                                <div id="result">
                                </div>

                            </div>
                        </div>
                    </div>
                </form>
            </div>
        </div>
<?php
}

1 个回复
SO网友:Welcher

您的ShortCode回调方法应该采用一个atts参数,该参数存储从do\\u ShortCode调用传递给它的属性,我假设您是如何获得数据库查询的$q参数的。

回调方法还应该返回,而不是回显输出。

在没有看到任何输出/错误消息的情况下,我想说您需要为短代码创建一个不同的方法。可能是一个输出将触发ajax调用的搜索表单的表单。

看一看aShorcode API 有关创建回调的详细信息。

结束

相关推荐

Content between shortcodes

我想知道是否有一种方法可以在短代码之间获取内容并将其输入到字符串中,例如,我希望能够拥有[短代码]Hello World![/shortcode]输入一个名为$ShortCodeText的字符串,我该怎么做?