当前位置: 首页 > 面试题库 >

如何在Wordpress插件中使用Ajax?

齐嘉庆
2023-03-14
问题内容

我有一个带有2个下拉框的Wordpress网站。当我在第一个下拉框中选择一个选项时,我希望第二个选项被PHP函数中的数据刷新。为此,我需要ajax。但是我正在努力将Ajax绑定到Wordpress中。

HTML看起来像这样:

<form method="get" action="http://siradjov.anex.at/playground/">
    <div class="form-inner">   
       <div class="listing-search-main">
            <input type="text" class="listing-search-text text" name="s" title="Coach House, Golf Course, Water View, etc" value="unique">
            <input type="submit" class="listing-search-submit btn btn-large btn-primary" name="search-submit" value="Search">
            </div><!-- .listing-search-main -->

       <div class="listing-search-details">
           <div class="listing-search-field listing-search-field-select listing-search-field-status">
           <select class="listing-search-status select" name="status">
              <option value="">Status</option>
              <option value="sale">Sales</option>
              <option value="rent">Rentals</option>
              <option value="foreclosure">Foreclosure</option>
           </select>

      <div class="listing-search-advanced " style="display: block;">
          <div class="listing-search-field listing-search-field-select listing-search-field-min">
           <select class="listing-search-min select" name="min">
              <option value="">Price (min)</option>
              <option value="100000">100.000</option>
              <option value="200000">200.000</option>
              <option value="300000">300.000</option>
              <option value="400000">400.000</option>
           </select>

现在,例如,当用户选择“销售”时,我希望第二个选择标签重新加载来自PHP数组的匹配价格。

PHP函数如下所示:

 <?php

$selectedStatus = $_POST['status'];


if($selectedStatus == "sale")
{

    // Set price (min) to select

    $fields['min']['type'] = 'select';

    // Set price (min) select options
    $fields['min']['data'] = array(
        '100000' => '120,000',
        '120000' => '200.000',
        '130000' => '300.000',
    );

    // Set price (max) to select

    $fields['max']['type'] = 'select';

    // Set price (max) select options

    $fields['max']['data'] = array(
        '100000' => '120,000',
        '120000' => '200.000',
        '130000' => '300.000',
    );


}
else if($selectedStatus == "rent")
    {

        // Set price (min) to select

        $fields['min']['type'] = 'select';

        // Set price (min) select options
        $fields['min']['data'] = array(
            '200' => '200',
        );

        // Set price (max) to select

        $fields['max']['type'] = 'select';

        // Set price (max) select options

        $fields['max']['data'] = array(
            '200' => '200',
        );

    }

echo $fields;

我将jQuery Ajax调用保存在单独的.js文件中。代码如下:

 jQuery(document).ready(function() {
jQuery(".listing-search-status.select[name='status']").change(function() {

        if (this.value == "sale")
        {
            jQuery.ajax({
                type: "POST",
                url: "http://siradjov.anex.at/playground/wp-content/plugins/wpcasa-extended-search-status-price-chain-select/wpcasa_custom_prices.php",
                    data: { status : "sale" },
                    success: function(data) 
                    {
                      alert('Sale' + data['min']['data'][0]);
                    }
                     });
        }
        else
        {
            if (this.value == "rent")
            {
                jQuery.ajax({
                    type: "POST",
                    url: "http://siradjov.anex.at/playground/wp-content/plugins/wpcasa-extended-search-status-price-chain-select/wpcasa_custom_prices.php",
                    data: { status : "rent" },
                                            success: function(data) 
                        {
                       alert('Rent' + data['min']['data'][0]);
                        }
                                     });
            }
        }

  });
 });

但是警报框不会显示。我也没有在Google Chrome浏览器的控制台上收到任何错误消息。谁能帮我?


问题答案:

使用Wordpress提供给您的本机方法来利用Ajax请求。

在您的插件文件中,我们需要添加几个操作,以便我们可以发送ajax请求并由admin-ajax.php文件进行解析。

add_action('wp_ajax_nopriv_ajax_request', 'ajax_controller');
add_action('wp_ajax_ajax_request', 'ajax_controller');

现在,我们在插件文件中构建了一个ajax控制器。这样做的目的是充当一个控制器,该控制器将根据请求FN提供的参数来切换其输出ajax(稍后会详细介绍)

function ajax_controller(){
    $ret = ''; //our return variable
    switch($_REQUEST['fn']):
        case 'status' :
            $ret = update_status($_REQUEST['status']);
            break;
    endswitch;
    echo $ret;
    die(); //this makes sure you don't get a "1" or "0" appended to the end of your request.
}

请注意,该update_status()函数是为了封装上述php代码而创建的。

现在我们已经绑定了动作,还有一个控制器,我们可以无限使用它来检索数据。我们只需要对ajax调用进行一些修改。首先,我们可以对“ rent /
sale”开关使用三元分配,而不是2个ajax调用,这将清除一切。其次,我们需要将URL地址更改为/wp-admin/admin-ajax.php文件。

var $status = (this.value == "sale") ? this.value : 'rent';
jQuery.ajax({
    type: "POST",
    url: "/wp-admin/admin-ajax.php",
    data: { 
       action: 'ajax_request', 
       fn : 'status', //this is the $_REQUEST['fn'] from above
       status : $status },
    success: function(data){
        alert('Sale' + data['min']['data'][0]);
    }
});

action参数是必需的,这fn是我的编码原则的结果。该action属性必须直接匹配add_action('wp_ajax_nopriv_和之后的内容add_action('wp_ajax_

这应该解决它。



 类似资料:
  • 越来越多的插件开始使用AJAX 技术。我个人并没有在大多数的插件中看到过AJAX,但是使用AJAX 来完成某个任务对你的插件来说可能是必要的。这篇文章将像你展示怎样在你的插件中使用AJAX。 这篇文章将在上一篇文章《在插件中添加js 和css》的基础上继续。 建立新的PHP文件 Devlounge Plugin Series 插件已经有了如下的目录结构了: devloung-plugin-seri

  • 现今的许多插件对javascript 和层叠样式表依赖更多了。将你插件中的javascript 和css 放置到分离的文件中是非常重要的,那样做会使插件维护起来更加容易。此系列中的这个部分将介绍怎样在你的插件中加载javascript 和CSS 文件。 添加你的JavaScript 你的插件可能需要装载prototype 类库,或者一个自定义的脚本。这一节将向你展示几个WordPress 函数,它

  • 我正在创建一个信使跟踪插件,并使用他们的API获取数据。它们返回的输出是JSON格式的。这是快递API 如何响应从这个curl命令得到的值? 问候

  • 问题内容: 我正在编写一个Wordpress MU插件,它在每个帖子中都包含一个链接,并且我想在用户单击此链接时使用ajax调用插件功能之一,然后使用该功能的输出动态更新链接文本。 。 我陷入了ajax查询。我已经有了这种复杂的,显然有点乱的方法,但是它不是很有效。在插件中包含Ajax功能的“正确”或“ wordpress”方式是什么? (下面是我当前的黑客代码。单击生成链接时,在wp页面中得到的

  • 我使用Wordpress中的Types插件创建自定义帖子类型。我已经添加了自定义字段“图像字段”,这是一个重复字段,通过这种方式,我想在我的帖子类型中创建类似gallery的内容 我是这样称呼前端的图像的 使用该代码,我可以看到包含所有图像和媒体文件链接的列表。但是我如何在img标签中添加缩略图而不是精确的图像呢?非常感谢。

  • 很多WordPress的付费插件是基于GPL协议的,于是就有人把这些插件弄到自己的网站提供免费下载,搜索“GPL Download”你能找到很多这种网站。它们给我们提供了免费试用WordPress付费插件的机会。 GPLDL gpldl.com是一个风格简洁,导航简单且信息清晰的网站,它有很多付费的插件和主题,以及WooCommerce的付费插件。 列举一些这个站点能免费下载到的WordPress