首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果新发布的文章发布了WordPress通知

问如果新发布的文章发布了WordPress通知
EN

WordPress Development用户
提问于 2022-06-27 15:16:01
回答 1查看 94关注 0票数 1

我使用WordPress,如果发布了带有post_type = job_post的新帖子,我希望提醒用户。此外,我想显示数量的新员额。

所以我加入了function.php

代码语言:javascript
复制
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;
}

我想在主菜单中向用户显示新的作业信息。

代码语言:javascript
复制
New jobs count 

另外,如果用户单击新建作业计数消息,我希望将$new_job_count设置为0

代码语言:javascript
复制
(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));

提前谢谢。

EN

回答 1

WordPress Development用户

回答已采纳

发布于 2022-07-12 12:12:58

除非值被以某种方式持久化,否则global $new_job_count将无法工作,因为数据只存在于process的生命周期中,并且在进程完成时会被清除。要获得当前计数,您需要执行一个查询,例如使用WP_Query。

要跟踪谁以及何时查看了已发布的帖子,将在用户单击post计数时触发Ajax (或WP休息)调用,并将当前时间保存到用户元中。当然,这只适用于登录用户。你需要给来访者用一块饼干之类的东西。

然后,可以将保存的时间戳与post计数查询一起使用,使其只对保存时间后发布的帖子进行计数。

例如,沿着这条线,

代码语言:javascript
复制
// 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();
  }
}

注:未经检验。根据需要修改。

票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/407139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档