[wp-trac] [WordPress Trac] #40325: Potential bug with the “get_post_type” function

WordPress Trac noreply at wordpress.org
Fri Mar 31 12:04:14 UTC 2017


#40325: Potential bug with the “get_post_type” function
-------------------------------+-----------------------------
 Reporter:  ancientro          |      Owner:
     Type:  defect (bug)       |     Status:  new
 Priority:  normal             |  Milestone:  Awaiting Review
Component:  Posts, Post Types  |    Version:  4.7.3
 Severity:  normal             |   Keywords:
  Focuses:                     |
-------------------------------+-----------------------------
 I have encountered a weird behavior in the WP code, and I want to report
 it, in case it is a bug.

 I have posted it in the Support forum first and I was advised to make a
 ticket here.

 '''Replication:'''

 I have a custom post type created. A function is added to the
 '''before_delete_post''' hook. In this function, I am verifying the
 current post type.

 I used to verify it with the '''get_post_type();''' function but I have
 found a problem with that in some cases. Now, I have replaced it with
 '''global $post_type;'''


 {{{
 class My_Example {
         public function build_admin() {
                 add_action('before_delete_post', array($this,
 'delete_post'));
         }

         public function delete_post($post_id) {
                 $case1 = get_post_type();

                 global $post_type;
                 $case2 = $post_type;
         }
 }
 }}}

 On the posts listing page, in the Trash table, there are 3 says of
 deleting posts:

 1. The '''Delete Permanently''' button for each post.
 2. The '''Empty Trash''' button.
 3. And through '''Bulk Actions > Delete Permanently > Apply'''.

 The '''get_post_type''' function returns the proper post type name only in
 the 1st case. For the other 2 cases, it returns '''false'''.

 However, '''global $post_type''' returns the proper value in all cases.

 I don’t know if it is a bug but it seems that way on the surface. If the
 global post type variable is set well, then the function should be able to
 return it too but I am not sure if something else it at play here.

 A bit more info:

 Looking over the source code for the
 [https://developer.wordpress.org/reference/functions/get_post_type/
 get_post_type] function in Code Reference, I see that it is using the
 [https://developer.wordpress.org/reference/functions/get_post/ get_post]
 function to retrieve an object, instance of '''WP_Post''', from which it
 gets the post type.

 So, the value is retrieved from different locations in the two examples.

--
Ticket URL: <https://core.trac.wordpress.org/ticket/40325>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list