我在一个受成员保护的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);
});
});
});
最合适的回答,由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"]
并做出相应的反应。