WordPress.org

Make WordPress Core

Ticket #4620: status_transit.diff

File status_transit.diff, 8.3 KB (added by ryan, 7 years ago)
  • wp-includes/default-filters.php

     
    184184add_action('init', 'smilies_init', 5); 
    185185add_action( 'plugins_loaded', 'wp_maybe_load_widgets', 0 ); 
    186186add_action( 'shutdown', 'wp_ob_end_flush_all', 1); 
     187add_action('publish_post', '_publish_post_hook', 5, 1); 
     188add_action('future_post', '_future_post_hook', 5, 2); 
     189add_action('future_page', '_future_post_hook', 5, 2); 
     190add_action('save_post', '_save_post_hook', 5, 2); 
     191add_action('transition_post_status', '_transition_post_status', 5, 3); 
    187192 
    188193?> 
     194 No newline at end of file 
  • wp-includes/post.php

     
    139139 
    140140function get_post_field( $field, $post, $context = 'display' ) { 
    141141        $post = (int) $post; 
    142         $post = get_term( $post ); 
     142        $post = get_post( $post ); 
    143143 
    144144        if ( is_wp_error($post) ) 
    145145                return $post; 
     
    420420        // TODO: Use array keys instead of hard coded list 
    421421        $fields = array('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_content_filtered', 'post_title', 'post_excerpt', 'post_status', 'post_type', 'comment_status', 'ping_status', 'post_password', 'post_name', 'to_ping', 'pinged', 'post_date', 'post_date_gmt', 'post_parent', 'menu_order', 'post_mime_type'); 
    422422 
    423         if ( 'raw' == $context ) 
    424                 return $post; 
    425  
    426423        $do_object = false; 
    427424        if ( is_object($post) ) 
    428425                $do_object = true; 
     
    442439        if ( in_array($field, $int_fields) ) 
    443440                $value = (int) $value; 
    444441 
     442        if ( 'raw' == $context ) 
     443                return $value; 
     444 
    445445        $prefixed = false; 
    446446        if ( false !== strpos($field, 'post_') ) { 
    447447                $prefixed = true; 
     
    586586                'post_parent' => 0, 'menu_order' => 0, 'to_ping' =>  '', 'pinged' => '', 'post_password' => ''); 
    587587 
    588588        $postarr = wp_parse_args($postarr, $defaults); 
     589        $postarr = sanitize_post($postarr, 'db'); 
    589590 
    590         if ( empty($postarr['no_filter']) ) 
    591                 $postarr = sanitize_post($postarr, 'db'); 
    592  
    593591        // export array as variables 
    594592        extract($postarr, EXTR_SKIP); 
    595593 
     
    597595        $update = false; 
    598596        if ( !empty($ID) ) { 
    599597                $update = true; 
    600                 $post = & get_post($ID); 
    601                 $previous_status = $post->post_status; 
     598                $previous_status = get_post_field('post_status', $ID); 
     599        } else { 
     600                $previous_status = 'new'; 
    602601        } 
    603602 
    604603        if ( ('' == $post_content) && ('' == $post_title) && ('' == $post_excerpt) ) 
     
    608607        if (0 == count($post_category) || !is_array($post_category)) { 
    609608                $post_category = array(get_option('default_category')); 
    610609        } 
    611         $post_cat = $post_category[0]; 
    612610 
    613611        if ( empty($post_author) ) 
    614612                $post_author = $user_ID; 
     
    632630                $post_name = sanitize_title($post_name); 
    633631        } 
    634632 
    635  
    636633        // If the post date is empty (due to having been new or a draft) and status is not 'draft', set date to now 
    637634        if (empty($post_date)) { 
    638635                if ( !in_array($post_status, array('draft', 'pending')) ) 
     
    738735 
    739736        if ( 'page' == $post_type ) { 
    740737                clean_page_cache($post_ID); 
    741                 $wp_rewrite->flush_rules(); 
    742738        } else { 
    743739                clean_post_cache($post_ID); 
    744740        } 
     
    747743        if ( ! $update ) 
    748744                $wpdb->query("UPDATE $wpdb->posts SET guid = '" . get_permalink($post_ID) . "' WHERE ID = '$post_ID'"); 
    749745 
    750         if ( $update) { 
    751                 if ($previous_status != 'publish' && $post_status == 'publish') { 
    752                         // Reset GUID if transitioning to publish. 
    753                         $wpdb->query("UPDATE $wpdb->posts SET guid = '" . get_permalink($post_ID) . "' WHERE ID = '$post_ID'"); 
    754                         do_action('private_to_published', $post_ID); 
    755                 } 
     746        $post = get_post($post_ID); 
     747        if ( !empty($page_template) ) 
     748                $post->page_template = $page_template; 
    756749 
    757                 do_action('edit_post', $post_ID); 
    758         } 
     750        wp_transition_post_status($post_status, $previous_status, $post); 
    759751 
    760         if ($post_status == 'publish' && $post_type == 'post') { 
    761                 do_action('publish_post', $post_ID); 
    762                 if ( defined('XMLRPC_REQUEST') ) 
    763                         do_action('xmlrpc_publish_post', $post_ID); 
    764                 if ( defined('APP_REQUEST') ) 
    765                         do_action('app_publish_post', $post_ID); 
     752        if ( $update) 
     753                do_action('edit_post', $post_ID, $post); 
    766754 
    767                 if ( !defined('WP_IMPORTING') ) { 
    768                         if ( $post_pingback ) 
    769                                 $result = $wpdb->query(" 
    770                                         INSERT INTO $wpdb->postmeta 
    771                                         (post_id,meta_key,meta_value) 
    772                                         VALUES ('$post_ID','_pingme','1') 
    773                                 "); 
    774                         $result = $wpdb->query(" 
    775                                 INSERT INTO $wpdb->postmeta 
    776                                 (post_id,meta_key,meta_value) 
    777                                 VALUES ('$post_ID','_encloseme','1') 
    778                         "); 
    779                         wp_schedule_single_event(time(), 'do_pings'); 
    780                 } 
    781         } else if ($post_type == 'page') { 
    782                 if ( !empty($page_template) ) 
    783                         if ( ! update_post_meta($post_ID, '_wp_page_template',  $page_template)) 
    784                                 add_post_meta($post_ID, '_wp_page_template',  $page_template, true); 
     755        do_action('save_post', $post_ID, $post); 
     756        do_action('wp_insert_post', $post_ID, $post); 
    785757 
    786                 if ( $post_status == 'publish' ) 
    787                         do_action('publish_page', $post_ID); 
    788         } 
    789  
    790         // Always clears the hook in case the post status bounced from future to draft. 
    791         wp_clear_scheduled_hook('publish_future_post', $post_ID); 
    792  
    793         // Schedule publication. 
    794         if ( 'future' == $post_status ) 
    795                 wp_schedule_single_event(strtotime($post_date_gmt. ' GMT'), 'publish_future_post', array($post_ID)); 
    796  
    797         do_action('save_post', $post_ID); 
    798         do_action('wp_insert_post', $post_ID); 
    799  
    800758        return $post_ID; 
    801759} 
    802760 
     
    841799} 
    842800 
    843801function wp_publish_post($post_id) { 
     802        global $wpdb; 
     803 
    844804        $post = get_post($post_id); 
    845805 
    846806        if ( empty($post) ) 
     
    849809        if ( 'publish' == $post->post_status ) 
    850810                return; 
    851811 
    852         return wp_update_post(array('post_status' => 'publish', 'ID' => $post_id, 'no_filter' => true)); 
     812        $wpdb->query( "UPDATE $wpdb->posts SET post_status = 'publish' WHERE ID = '$post_id'" ); 
     813 
     814        $old_status = $post->post_status; 
     815        $post->post_status = 'publish'; 
     816        wp_transition_post_status('publish', $old_status, $post); 
     817 
     818        do_action('edit_post', $post_id, $post); 
     819        do_action('save_post', $post_id, $post); 
     820        do_action('wp_insert_post', $post_id, $post); 
    853821} 
    854822 
    855823function wp_add_post_tags($post_id = 0, $tags = '') { 
     
    887855        return wp_set_object_terms($post_ID, $post_categories, 'category'); 
    888856}       // wp_set_post_categories() 
    889857 
     858function wp_transition_post_status($new_status, $old_status, $post) { 
     859        if ( $new_status != $old_status ) { 
     860                do_action('transition_post_status', $new_status, $old_status, $post); 
     861                do_action("${old_status}_to_$new_status", $post); 
     862        } 
     863        do_action("${new_status}_$post->post_type", $post->ID, $post); 
     864} 
     865 
    890866// 
    891867// Trackback and ping functions 
    892868// 
     
    18431819        } 
    18441820} 
    18451821 
     1822// 
     1823// Hooks 
     1824// 
     1825 
     1826function _transition_post_status($new_status, $old_status, $post) { 
     1827        global $wpdb; 
     1828 
     1829        if ( $old_status != 'publish' && $new_status == 'publish' ) { 
     1830                        // Reset GUID if transitioning to publish. 
     1831                        $wpdb->query("UPDATE $wpdb->posts SET guid = '" . get_permalink($post->ID) . "' WHERE ID = '$post->ID'"); 
     1832                        do_action('private_to_published', $post->ID);  // Deprecated, use private_to_publish 
     1833        } 
     1834 
     1835        // Always clears the hook in case the post status bounced from future to draft. 
     1836        wp_clear_scheduled_hook('publish_future_post', $post->ID); 
     1837} 
     1838 
     1839function _future_post_hook($post_id, $post) { 
     1840        // Schedule publication. 
     1841        wp_schedule_single_event(strtotime($post->post_date_gmt. ' GMT'), 'publish_future_post', array($post->ID)); 
     1842} 
     1843 
     1844function _publish_post_hook($post_id) { 
     1845        global $wpdb; 
     1846 
     1847        if ( defined('XMLRPC_REQUEST') ) 
     1848                do_action('xmlrpc_publish_post', $post_id); 
     1849        if ( defined('APP_REQUEST') ) 
     1850                do_action('app_publish_post', $post_id); 
     1851 
     1852        if ( defined('WP_IMPORTING') ) 
     1853                return; 
     1854 
     1855        $post = get_post($post_id); 
     1856 
     1857        if ( $post->post_pingback ) 
     1858                $result = $wpdb->query(" 
     1859                        INSERT INTO $wpdb->postmeta 
     1860                        (post_id,meta_key,meta_value) 
     1861                        VALUES ('$post_id','_pingme','1') 
     1862                "); 
     1863        $result = $wpdb->query(" 
     1864                INSERT INTO $wpdb->postmeta 
     1865                (post_id,meta_key,meta_value) 
     1866                VALUES ('$post_id','_encloseme','1') 
     1867        "); 
     1868        wp_schedule_single_event(time(), 'do_pings'); 
     1869} 
     1870 
     1871function _save_post_hook($post_id, $post) { 
     1872        if ( $post->post_type == 'page' ) { 
     1873                if ( !empty($post->page_template) ) 
     1874                        if ( ! update_post_meta($post_id, '_wp_page_template',  $post->page_template)) 
     1875                                add_post_meta($post_id, '_wp_page_template',  $post->page_template, true); 
     1876 
     1877                clean_page_cache($post_id); 
     1878                global $wp_rewrite; 
     1879                $wp_rewrite->flush_rules(); 
     1880        } else { 
     1881                clean_post_cache($post_id); 
     1882        } 
     1883} 
     1884 
    18461885?> 
     1886 No newline at end of file