您将希望使用AJAX实现这一点。阅读Codex中的这两篇文章,了解有关将Wordpress与一些AJAX操作集成的更多信息:
为了给你一个先发制人的机会,你会想要这样的东西:
客户端(Javascript)
$(element).click(function() {
var data = {
action: \'get_author_info\',
author_id: your-author-id
};
$.post(ajaxurl, data, function(response) {
var res = wpAjax.parseAjaxResponse(response, \'ajax-response\');
$.each( res.responses, function() {
if (this.what == \'has\') {
$(your-lightbox).html( this.data );
} else {
// Some error/no result handling
}
});
});
将单击处理程序绑定到author元素,传递一些数据:传递
action
部分数据。其他一切都取决于您,也许您需要通过一些
jQuery.data()
例如
然后您发布到ajaxurl
.
Note 如果您在管理端使用此脚本,则自WP 2.8ajaxurl
总是定义的,如果没有定义,则必须定义它。在任何情况下,您都应该通过admin-ajax.php
.
收到响应后,解析它并用服务器端处理的数据填充lightbox HTML。
插件中的服务器端functions.php
:
add_action(\'wp_ajax_nopriv_get_author_info\', \'my_get_author_info\');
add_action(\'wp_ajax_get_author_info\', \'my_get_author_info\');
function my_get_author_info(){
$response = new WP_Ajax_Response();
// Insert here everything you want to do to retrieve your
// authors data, perhaps even process already the HTML
// in some sort of template, using output buffer, or string
// concatenation, or whatever.
//
// Then you will store it into a variable that we will call
// $output, for convenience.
$success_response->add(array(
\'what\' => \'has\',
\'data\' => $output
));
}
$success_response->send();
}
使用
add_action
将您的
callback
功能到
wp_ajax
和
wp_ajax_nopriv
(基本上不同的是,一个只有在登录时才能工作,另一个不登录时才能工作)。
Note 绑定在AJAX数据中定义的操作名称!
定义callback
函数和,使用WP_Ajax_Response 您可以将所需的所有数据发送回AJAX请求。
基本上,这就是让它工作所需的全部。也许您需要实现一些nonce
s、 或check_ajax_referer()
但在这一点上,你必须做更多的研究。
更新我查看了您的函数,并且可以看到一些可能导致错误的东西。例如,您在AJAX请求中发布post_id
然后在函数中检查$_POST[\'author_id\']
.
此外,在您使用的函数中the_author_meta
(与结果相呼应)而不是get_the_author_meta
(其中returns
它)填充变量。
我没有检查这些函数中的所有错误,而是用我在原始答案中给你的建议重写了它们,它工作得非常完美。让我解释一下:
Javascript
$(\'#options_to_connect a\').on(\'click\', function (e){
e.preventDefault();
var data = {
action: \'ajaxified_function\',
author_id: 1
};
$.post(ajaxurl, data, function (response) {
var res = wpAjax.parseAjaxResponse(response, \'ajax-response\');
$.each( res.responses, function() {
if (this.what == \'has\') {
$(\'#cboxLoadedContent\').html( this.data );
} else {
console.error(\'Error\');
}
});
});
});
这里没有什么太花哨的东西,但是比您使用的代码更干净一些。我把
data
在一个漂亮整洁的对象中,我还使用
ajaxurl
变量,而不是对URL进行硬编码。正如我之前所说,如果您在管理端使用脚本,那么您已经有了
ajaxurl
可用,如果不可用,请通过
wp_localize_script 使用
admin_url(\'admin-ajax.php\')
.
然后使用WPAjax
解析响应。要小心,为了使用它,您必须排队wp-ajax-response
在您的functions.php
.
PHP
add_action( \'wp_ajax_ajaxified_function\', \'ajaxified_function\' );
add_action( \'wp_ajax_nopriv_ajaxified_function\', \'ajaxified_function\' );
function ajaxified_function()
{
$response = new WP_Ajax_Response();
$id = $_POST[\'author_id\'];
$auth_name = get_the_author_meta(\'display_name\', $id);
$avatar = get_avatar($id);
$desc = get_the_author_meta(\'description\', $id);
$output = "<div id=\'bloggers_title\'>$auth_name</div>\\n
<div id=\'bloggers_avatar\'>$avatar</div>\\n
<div id=\'bloggers_desc\'>$desc</div>";
$response->add(array(
\'what\' => \'has\',
\'data\' => $output
));
$response->send();
}
这里也没有什么新奇或不同于我在旧答案中所说的内容,只是根据你的情况进行了调整。使用
WP_Ajax_Response 处理这件事很容易。
记住使用get_
函数的版本!这样您就可以返回所需的数据。
此外send()
方法die()
因此,您不必做任何其他事情来确保正确的AJAX响应。