从20个按钮和20个表中获取定制数据库记录的最有效方式?

时间:2018-09-17 作者:Corpuscular

我在一个受成员保护的wordpress页面上有20个按钮,每个按钮从wp\\uDatabase中的不同自定义表中获取一条随机记录。

@janh提供了一个解决方案here 使用php函数和js脚本获取随机记录。

然而,我想知道是否有更有效的方法来编写php函数或jquery,这样我就没有20个副本了?

在我的独立原型中,我使用onClick事件并传递了一个变量,该变量在php函数getData(tableName)中为每个按钮选择了一个不同的表。onClick=“getData(1)”和onClick=“getData(2)”

然而,当前的工作解决方案并没有在jQuery中使用onClick事件,而是被调用(我认为),因为quote\\u刷新。js脚本已“附加”到元素。

选项:

1: 创建20个不同的函数和20个不同的js文件,并为每个按钮指定一个唯一的名称。

2: 找到将按钮值传递给wpse\\u 314311\\u get\\u quote()函数的方法,并使用if else语句选择不同的表

3: 找到一些方法将值传递给wp\\u enqueue\\u脚本,以便它可以将值传递给quote\\u refresh。js脚本并附加到其他按钮

如果我能提供更多信息,请告诉我。

我对WP jquery非常陌生,不知道可以使用哪些函数来解决这个问题。我甚至不确定我是否正确地解释了我的目标。

函数中的函数。php

function wpse_314311_get_quote() {
    global $wpdb;
    if($quote = $wpdb->get_row("SELECT fieldOne FROM myCustomTable ORDER BY RAND() LIMIT 0, 1")) {
        print json_encode(array("success" => true, "message" => $quote->fieldOne));
    }
    else {
        print json_encode(array("success" => false, "message" => "no quote found"));
    }
    // print json to client
    exit;
}
add_action( \'wp_ajax_get_quote\', \'wpse_314311_get_quote\' );
wp_enqueue_script( "quote-refresh", get_template_directory_uri() . "/js/quote-refresh.js", array("jquery") );
和quote\\u刷新。js公司

jQuery(document).ready(function($) {
    $("#myButton2").click( function() {
        jQuery.post("/wp-admin/admin-ajax.php", { "action": "get_quote"}, function(response) {
            var obj = JSON.parse(response);
            $("textarea[name=\'myDiv\']").val(obj.message);
            //console.log(response);
        });
    });
});

1 个回复
最合适的回答,由SO网友:janh 整理而成

我想最简单的方法是在按钮本身中包含操作或其他参数,即。

<div class="mybutton" data-action="get_quote" data-type="literary">Get a literary quote</div>
<div class="mybutton" data-action="get_quote" data-type="political">Get a political quote</div>
data-foo="bar" 可以使用在jQuery中轻松访问属性.data("foo"), 因此,您可以稍微更改jQuery,以侦听类上的单击,而不是单个ID:

jQuery(document).ready(function($) {
    $(".mybutton").click( function() {
        jQuery.post("/wp-admin/admin-ajax.php", { "action": $(this).data("action"), "type": $(this).data("type")}, function(response) {
            var obj = JSON.parse(response);
            $("textarea[name=\'myDiv\']").val(obj.message);
            //console.log(response);
        });
    });
});
瞧,现在只需在按钮HTML中设置属性,就可以将数据传递到AJAX API。在PHP方面,您可以检查$_POST["type"] 并做出相应的反应。

结束

相关推荐

WP_QUERY AJAX加载器检测帖子结束

我构建了ajax加载程序,如下所示。如何检测它何时到达所有帖子的末尾?这样我就可以让“更多”按钮消失,或者不再可以点击。页面模板中:WP_Query stuff... if ($press_posts->max_num_pages > 1) : echo \'<a class=\"link-button\" id=\"load-more\">More</a>\'; endif; 功能。phpfunction more_