我使用WordPress,如果发布了带有post_type = job_post的新帖子,我希望提醒用户。此外,我想显示数量的新员额。
所以我加入了function.php
global $new_job_count = 0;
function newJobAdded($ID, $post ) {
$new_job_count = $new_job_count + 1;
}
add_action( 'publish_job_post', 'newJobAdded', 10, 2 );
function mytheme_new_job_count(){
$new_job_count = 0;
}我想在主菜单中向用户显示新的作业信息。
New jobs count 另外,如果用户单击新建作业计数消息,我希望将$new_job_count设置为0
(function ($) {
$(".new_job_count_class").on("click", function () {
alert('click');
$.ajax({
url: '',
type: 'POST',
data:{
action: 'mytheme_new_job_count'
},
// success: function( data ){
// alert("success");
// location.reload();
// }
});
});
}(jQuery));提前谢谢。
发布于 2022-07-12 12:12:58
除非值被以某种方式持久化,否则global $new_job_count将无法工作,因为数据只存在于process的生命周期中,并且在进程完成时会被清除。要获得当前计数,您需要执行一个查询,例如使用WP_Query。
要跟踪谁以及何时查看了已发布的帖子,将在用户单击post计数时触发Ajax (或WP休息)调用,并将当前时间保存到用户元中。当然,这只适用于登录用户。你需要给来访者用一块饼干之类的东西。
然后,可以将保存的时间戳与post计数查询一起使用,使其只对保存时间后发布的帖子进行计数。
例如,沿着这条线,
// functions
function my_user_last_new_jobs_check(int $user_id) {
return get_user_meta($user_id, 'new_jobs_checked', true);
}
function my_user_new_jobs_checked_now(int $user_id) {
return update_user_meta($user_id, 'new_jobs_checked', date('Y-m-d H:i:s'));
}
function my_get_new_jobs_count(int $user_id = 0) {
$args = [
'posts_per_page' => 500, // use some reasonable upper limit to prevent performance issues
'post_type' => 'job',
'post_status' => 'publish',
'no_found_rows' => true,
'update_post_meta_cache' => false,
'update_post_term_cache' => false,
'fields' => 'ids',
];
$lastChecked = $user_id ? my_user_last_new_jobs_check($user_id) : ''; // maybe add default date & time as fallback
if ( $lastChecked ) {
$args['date_query'] = [
'after' => $lastChecked, // strtotime()-compatible string can be used here
];
}
$query = new WP_Query($args);
return $query->found_posts;
}
// template file
$newJobsCount = my_get_new_jobs_count(get_current_user_id());
echo $newJobsCount;
// ajax
add_action( 'wp_ajax_new_job_count_checked', 'my_ajax_callback' );
// add_action( 'wp_ajax_nopriv_new_job_count_checked', 'my_ajax_callback' );
function my_ajax_callback() {
// maybe validations, other checks, etc. here
$timestampSet = my_user_new_jobs_checked_now(get_current_user_id());
if ( $timestampSet ) {
wp_send_json_success();
} else {
wp_send_json_error();
}
}注:未经检验。根据需要修改。
https://wordpress.stackexchange.com/questions/407139
复制相似问题