[wp-trac] [WordPress Trac] #37542: Taxonomies in cron jobs cause problems

WordPress Trac noreply at wordpress.org
Tue Aug 2 09:39:26 UTC 2016


#37542: Taxonomies in cron jobs cause problems
-------------------------------+------------------------------
 Reporter:  blatan             |       Owner:
     Type:  defect (bug)       |      Status:  new
 Priority:  normal             |   Milestone:  Awaiting Review
Component:  Taxonomy           |     Version:  4.5.3
 Severity:  normal             |  Resolution:
 Keywords:  reporter-feedback  |     Focuses:
-------------------------------+------------------------------
Changes (by ocean90):

 * keywords:   => reporter-feedback


Old description:

> The problem is similiar to this one:
> https://core.trac.wordpress.org/ticket/19373
>
> I had figured out the workaround for my issue before I found the above
> ticket.
>
> I created an import data from an external database. It can be called by
> admin manually or in daily cron jobs.
> In the cron job I have to check if a taxonomy exists in my DB, so I get
> it with
> {{{
> get_term_by('slug', ... );
> }}}
>
> If user calls it everything worked fine, but in cron job didn't. I
> noticed the problem is in get_term_by -> taxonomy_exists.
>
> Taxonomy_exists checks if the given taxonomy is in global $wp_taxonomies
> array.
>
> I tried to use set_current_user in beginning of the cron job, but it does
> not work. It seems to $wp_taxonomies is set before the job.
>
> I searched if there a hook like 'before_cron_job', but I haven't found
> any.
>
> My workaround is quite silly but it works. In the beginning of my cron
> job callback I call:
> {{{
> function updateTaxonomiesForCron() {
>     global $wp_taxonomies;
>     if ( defined('DOING_CRON') ){
>         $wp_taxonomies['region'] = [];
>     }
> }
> }}}
>
> I can see the problem with current_user_can for taxonomies is quite old
> and probably my ticket will be set as duplicated but I just want to show
> my case of the issue.
>
> Best regards
> Bernard

New description:

 The problem is similiar to this one: #19373

 I had figured out the workaround for my issue before I found the above
 ticket.

 I created an import data from an external database. It can be called by
 admin manually or in daily cron jobs.
 In the cron job I have to check if a taxonomy exists in my DB, so I get it
 with
 {{{
 get_term_by('slug', ... );
 }}}

 If user calls it everything worked fine, but in cron job didn't. I noticed
 the problem is in get_term_by -> taxonomy_exists.

 Taxonomy_exists checks if the given taxonomy is in global $wp_taxonomies
 array.

 I tried to use set_current_user in beginning of the cron job, but it does
 not work. It seems to $wp_taxonomies is set before the job.

 I searched if there a hook like 'before_cron_job', but I haven't found
 any.

 My workaround is quite silly but it works. In the beginning of my cron job
 callback I call:
 {{{
 function updateTaxonomiesForCron() {
     global $wp_taxonomies;
     if ( defined('DOING_CRON') ){
         $wp_taxonomies['region'] = [];
     }
 }
 }}}

 I can see the problem with current_user_can for taxonomies is quite old
 and probably my ticket will be set as duplicated but I just want to show
 my case of the issue.

 Best regards
 Bernard

--

Comment:

 Hello @blatan, thanks for your report.

 This doesn't sound like #19373. Are you sure that you register your
 taxonomy correctly? Can you provide some code and steps to reproduce this
 issue? Thanks!

--
Ticket URL: <https://core.trac.wordpress.org/ticket/37542#comment:1>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list