WordPress 中的变量 table 文本取决于折扣代码

Variable table text in WordPress depending on discount code

我正在 WordPress 网站上的 "Rates" 页面上工作,该页面应包含 table 房价(价格)和下方的折扣代码输入字段。 根据可用的两个折扣代码之一,如果正确输入其中一个折扣代码,原始 table 单元格内的所有数字都应更改为预设的固定值。

基本上,我正在寻找一种在 WordPress 中在页面上设置输入字段的方法,该输入字段可验证 2 个不同的密码并导致页面上的另一个文本动态更改。

我在一个旧的 HTML 网站上进行了这样的工作:

<form id="form1" name="form1" method="get" action="validate.php">
<label>
<input type="text" name="dcode" id="dcode" />
</label>
<label>
<input type="submit" name="button" id="button" value="Enter Promotional Code" />
</label>
</form>

这是 validate.php

<?php $struser=$_GET['dcode']; IF ($struser=="KOD1") { header( 'Location: dis_10.php'); } 
ELSEIF ($struser=="KOD2") { header( 'Location: dis_15.php'); } 
ELSEIF ($struser=="KOD3") { header( 'Location: dis_20.php'); } 
ELSE { header( 'Location: dis_inv.html'); } ?>

即将更改的信息是此 table 中的最后 3 个单元格:

<table id="rates"> <tbody> 
<tr><td>Single</td> <td>1</td> <td>140</td> </tr>
<tr><td>Double</td> <td>2</td> <td>250</td> </tr>
<tr><td>Suite</td> <td>4</td> <td>320</td> </tr>
</tbody></table>

谢谢

将事件侦听器绑定到您的折扣代码输入字段,并让它在更改时通过 ajax 将值提交给服务器。

查询数据库中的代码和 return 如果代码匹配则您认为合适的值。

在您的 ajax 调用中处理服务器响应,并将从服务器收到的值替换为您页面上已经显示的值。

是的,非常简单。

编辑

我给你做了一个wordpress插件。它非常简单,但它可以满足您的需求,并希望展示如何为 wordpress 组合插件的基本概念。

我对您的 HTML 进行了一些更改。我必须向所有包含价格的 TD 添加一个 class,以便 jQuery 可以迭代这些值,并且我添加了一个用于输入代码的输入框、一个提交按钮和一个空的向用户显示结果的 span 标签。您可以更改这些以适应,但如果您更改 ID,则必须在 javascript 文件中更改对它们的引用。

我的 HTML 看起来像这样:

<table id="rates">
    <tbody>
        <tr>
            <td>
                Single
            </td>
            <td>
                1
            </td>
            <td class="Price">
                140
            </td>
        </tr>
        <tr>
            <td>
                Double
            </td>
            <td>
                2
            </td>
            <td class="Price">
                210
            </td>
        </tr>
        <tr>
            <td>
                Suite
            </td>
            <td>
                4
            </td>
            <td class="Price">
                320
            </td>
        </tr>
    </tbody>
</table>
<input type="text" placeholder="Enter discount code" id="promocode">
<button id="discount">
    Apply discount
</button> 
<span id="message"></span>

在您的 Wordpress 插件目录中创建一个新目录并将其命名为 discount-codes 或类似名称,然后将以下内容保存为 check-discount-code.php:

<?php 
/**
* Plugin Name: Check discount codes
* Plugin URI: https://www.example.com
* Description: Simple plugin that uses Ajax in WordPress to check discount codes and apply discounts
* Version: 1.0.0
* Author: miknik
* Author URI: https://www.example.com
* License: GPL2
*/
add_action( 'wp_enqueue_scripts', 'ajax_discount_checker_script' );
function ajax_discount_checker_script() {
    if (is_page('ENTER-YOUR-PAGE-NAME/SLUG/ID-HERE')){  // Use page name/ID with the table on, so the js only loads on that page
        wp_enqueue_script( 'custom_discount_code_js', plugins_url( '/custom_discount_code.js', __FILE__ ), array('jquery'), '1.0', 

true );
        wp_localize_script( 'custom_discount_code_js', 'checkDiscountCode', array(
            'ajax_url' => admin_url( 'admin-ajax.php' )
        ));
    }
}
// Follwing two lines set the 'action' parameter you post to admin-ajax.php followed by the function which is called by that action
// wp_ajax_nopriv sets the function called if user is not logged in while wp_ajax sets the function for logged in users
add_action( 'wp_ajax_nopriv_check_discount_code', 'check_discount_code' ); 
add_action( 'wp_ajax_check_discount_code', 'check_discount_code' );
function check_discount_code() {
    $discountten = 'KOD1'; // These are the discount codes which are valid. Add more or change to suit
    $discountfifteen = 'KOD2'; // If you change or add to them make sure you use uppercase letters
    $discounttwenty = 'KOD3';
    $dcode = strtoupper(sanitize_text_field($_POST['dcode'])); // Sanitizes the POST value and converts to uppercase
    if ($dcode === $discountten) {
        $response = array('message' => 'Your 10% discount has been applied','discount' => 10);
    }
    else if ($dcode === $discountfifteen) {  // Create arrays with a message for the user and a discount rate in percent
        $response = array('message' => 'Your 15% discount has been applied', 'discount' => 15);
    }
    else if ($dcode === $discounttwenty) {
        $response = array('message' => 'Your 20% discount has been applied', 'discount' => 20);
    }
    else {         //  Error message for users who submit an invalid code
        $response = array('message' => 'Sorry the discount code you have entered is not valid', 'discount' => 0);
    }
    echo json_encode($response);  // Output the array as json to be returned to your javascript ajax call
    wp_die(); // Terminates the script - if you omit this then a 0 wil be added to the end of the output which will break your json
}

然后最后将下面的内容保存在custom_discount_code.js

同一目录下
jQuery( '#discount' ).click(function() {  // Binds this function to run when HTML element with id=discount is clicked
    var dcode = jQuery('#promocode').val();  // Sets variable dcode to the value entered in element with id=promocode
    jQuery.ajax({                         // Makes ajax call to Wordpress ajax url
        url : checkDiscountCode.ajax_url,        // checkDiscountCode is included in wp_localize_script in php file
        type : 'post',                           // this is necessary for users who are not logged in
        dataType: 'json',                        // set the expected server response type to json
        data : {
            action : 'check_discount_code',      // action value must match value defined in add_action in php file
            dcode : dcode                        // posts the dcode variable as $_POST['dcode']
        },
            success : function( response ) {     // the response variable contains the entire json response from the server
                var discount_pct = Number(response.discount);   // adding .discount returns the value of that key in the array
                jQuery('#message' ).text(response.message);   // insert the message into the empty span
                if ( discount_pct > 0) {                      // Only update the prices if the discount is above 0
                    jQuery( '.Price' ).each(function( i ) {   // Iterate over all the prices
                        var price = jQuery( this ).text();    // Get the current price
                        var discount = -(price * discount_pct/100);   // Calculate the discount amount
                        var total = Number(price) + Number(discount);  // Subtract the discount from original price
                        jQuery( this ).text(total.toFixed(0));  // Display the discounted price as a whole number
                    });
                    jQuery( '#discount' ).off();  // Disable the button once a discount has been applied
                }
            }
    });
});

确保在 php 文件中设置了 table 所在页面的 name/ID,然后在 wordpress 控制面板中激活插件,然后你应该可以走了。测试并处理我的一个 wordpress 安装。

玩得开心。