您可以使用前面的按钮,将当前显示的帖子的ID保存在用户的meta中。以下是一种简单的方法:
在前面输出一个按钮
您需要在
single.php
(或您想要的任何页面)允许用户实际将帖子设置为收藏夹。下面的模板执行此操作。这个
like-overlay
类用于在处理请求时创建加载效果。
<div id="like-button" class="like btn btn-default" type="button">
<span class="fa fa-heart"></span>
<span class="like-overlay"><i class="fa fa-spin fa-circle-o-notch"></i></span>
</div>
<input type="hidden" value="<?php the_ID(); ?>" id="current-post-id"/>
<input type="hidden" value="<?php echo get_current_user_id(); ?>" id="current-user-id"/>
当用户单击按钮时,向该按钮添加单击事件,向服务器发送AJAX请求,并根据结果更新按钮。您可能需要本地化脚本以传递rest URL和其他数据。
$(\'#like-button\').on(\'click\',function (e) {
e.preventDefault();
$.ajax({
type: \'GET\',
url: \'http://example.com/wp-json/my_route/v1/ajax_favorite\',
data: { post_id: $(\'#current-post-id\').val(), user_id : $(\'#current-user-id\').val() },
beforeSend: function() {
$(\'#like-button\').addClass(\'active\').prop(\'disabled\', true);
},
success: function(data){
$(\'#like-button\').removeClass(\'active\').prop(\'disabled\', false);
if( data != null ){
if( data == \'400\' ) {
$(\'#like-button\').removeClass(\'selected\');
} else if( data == \'200\') {
$(\'#like-button\').addClass(\'selected\');
}
}
},
error:function(){
}
});
});
使用REST-API处理Ajax请求现在创建REST路由并处理数据。如果收到的帖子ID在用户元中不存在,请添加它并返回成功的代码。如果有,请删除它并让脚本知道它。
add_action( \'rest_api_init\', \'my_rest_routes\');
function my_rest_routes() {
// Path to ajax like function
register_rest_route(
\'my_route/v1\',
\'/ajax_favorite/\',
array(
\'methods\' => \'GET\',
\'callback\' => \'ajax_favorite\'
)
);
}
function ajax_favorite(){
// If the ID is not set, return
if(!isset($_GET[\'post_id\']) || !isset($_GET[\'user_id\'])){
return $data[\'status\'] = \'500\';
}
// Store user and product\'s ID
$post_id = sanitize_text_field($_GET[\'post_id\']);
$user_id = sanitize_text_field($_GET[\'user_id\']);
$user_meta = get_user_meta($user_id,\'_favorite_posts\',false);
// Check if the post is favorited or not
if( in_array( $post_id, $user_meta ) ){
delete_user_meta($user_id,\'_favorite_posts\',$post_id);
return $data[\'status\'] = \'400\';
} else {
add_user_meta($user_id,\'_favorite_posts\',$post_id);
return $data[\'status\'] = \'200\';
}
}
您可以将其用作模板,以输出将数据从前端保存到数据库的任何按钮。不要忘记清理数据,也要使用nonce。
现在你当然只需要_favorite_posts
用户meta,只要您想显示它。