我正在努力学习严肃的php WP开发。我的目标是在点击按钮时标记文章完成/阅读。我发现了这个很棒的ajax教程插件。以下是tutorial, 对于plugin. 我成功地编辑了插件表单。单击它会检查数组中是否已经存在该id,如果已经存在,则会从数组中删除该元素。如果数组中没有id,或者数组为空,则会将post id添加到数组中。之后,将数组更新为db。
以下是按钮的代码,添加在帖子内容之后:
public function rml_button( $content ) {
$rml_post_id = get_the_id();
// Show read me later link only when user is logged in
if( is_user_logged_in() && get_post_type() == post ) {
if( get_user_meta( wp_get_current_user()->ID, \'rml_post_ids\', true ) !== null ) {
$value = get_user_meta( wp_get_current_user()->ID, \'rml_post_ids\', true );
}
if( $value ) {
if (in_array($rml_post_id, $value)) {
$html .= \'<a href="#" class="rml_bttn" data-id="\' . get_the_id() . \'">DONE</a>\';
$content .= $html;
}
else {
$html .= \'<a href="#" class="rml_bttn" data-id="\' . get_the_id() . \'">MARK AS DONE</a>\';
$content .= $html;
}
}
else {
$html .= \'<a href="#" class="rml_bttn" data-id="\' . get_the_id() . \'">MARK AS DONE</a>\';
$content .= $html;
}
}
return $content;
}
以下是更新数据库的代码:
public function read_me_later() {
check_ajax_referer( \'rml-nonce\', \'security\' );
$rml_post_id = $_POST[\'post_id\'];
$echo = array();
if( get_user_meta( wp_get_current_user()->ID, \'rml_post_ids\', true ) !== null ) {
$value = get_user_meta( wp_get_current_user()->ID, \'rml_post_ids\', true );
}
if( $value ) {
if (in_array($rml_post_id, $value)) {
foreach (array_keys($value, $rml_post_id, true) as $key) {
unset($value[$key]);
}
$echo = $value;
}
else {
$echo = $value;
array_push( $echo, $rml_post_id );
}
}
else {
$echo = array( $rml_post_id );
}
update_user_meta( wp_get_current_user()->ID, \'rml_post_ids\', $echo );
// Always die in functions echoing Ajax content
die();
}
最后,这里是。ajax调用的js:
jQuery(document).ready( function(){
jQuery(\'#content\').on(\'click\', \'a.rml_bttn\', function(e) {
e.preventDefault();
var rml_post_id = jQuery(this).data( \'id\' );
jQuery.ajax({
url : rml_obj.ajax_url,
type : \'post\',
data : {
action : \'read_me_later\',
security : rml_obj.check_nonce,
post_id : rml_post_id
},
success : function( response ) {
jQuery(\'.rml_contents\').html(response);
}
});
//jQuery(this).hide();
});
});
我不明白的是,如果这是一个愚蠢的问题,我很抱歉,那就是如何在ajax之后更改按钮文本?如何调用此函数
rml_button()
, 在…内
read_me_later()
因此,按钮文本将在db更新后更改。
非常感谢。