我会使用默认值WP AJAX API 因此,WP可以为您处理所有身份验证。
您需要添加一个函数和一个操作来触发它:
function wpse_314311_get_quote() {
// get quote from db
// print json to client
exit;
}
add_action( \'wp_ajax_get_quote\', \'wpse_314311_get_quote\' );
这样,WP将确保只允许登录用户访问API。如果您还想允许匿名用户,您可以添加
add_action( \'wp_ajax_nopriv_get_quote\', \'wpse_314311_get_quote\' );
在服务器端,您将使用
WPDB 要访问WP数据库中的自定义表,请执行以下操作:
global $wpdb;
if($quote = $wpdb->get_row("SELECT * FROM my_quotes_table ORDER BY RAND() LIMIT 0, 1")) {
print $quote->quote_body . " by " . $quote->quote_author;
}
这可能看起来像
function wpse_314311_get_quote() {
global $wpdb;
if($quote = $wpdb->get_row("SELECT * FROM my_quotes_table ORDER BY RAND() LIMIT 0, 1")) {
print json_encode(array("success" => true, "message" => $quote->quote_body));
}
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\' );
在前端,您可以通过向API传递action=get\\u quote来访问它(通常为/wp admin/admin-ajax.php,但您可能希望将其放入变量中
wp_localize_script):
jQuery(document).ready(function($) {
$("#myButton").click( function() {
jQuery.post("/wp-admin/admin-ajax.php", { "action": "get_quote"}, function(response) {
console.log(response);
$("#myDiv").text(response.message);
});
}
});
将其放入脚本中(在本例中,我假设在您的主题中
js
名为的文件中的文件夹
quote-refresh.js
并使WP加载
wp_enqueue_script. 确保让WP知道您的脚本需要加载jQuery,例如:。
wp_enqueue_script( "quote-refresh", get_template_directory_uri() . "/js/quote-refresh.js", array("jquery") );
你可以把一切都放在你的主题功能中。php假设您使用的是子主题,而不是直接下陷阱(如果您想要自定义主题中的任何内容,并且仍然能够更新原始主题,则应该这样做),或者
create a very simple plugin 将其添加到WP。
至于控制访问:这取决于你的偏执狂。保护未经授权的访问很容易,WP将确保请求来自登录用户。确保那些用户不使用自动化来吸取数据库中的所有内容要困难得多——你必须决定哪种行为模式是无聊的人每隔几秒钟点击“刷新”来阅读其他内容,哪种是只想要内容的机器人。
请原谅代码中的拼写错误和bug,我现在没有任何方法来运行它。