WordPress.org

Make WordPress Core

Ticket #33276: option.php.diff

File option.php.diff, 3.8 KB (added by shmulikk, 6 years ago)

git diff of suggested fix

  • wp-includes/option.php

     wp-includes/option.php | 80 +++++++++++++++++++++++---------------------------
     1 file changed, 36 insertions(+), 44 deletions(-)
    
    diff --git a/wp-includes/option.php b/wp-includes/option.php
    index 1b5dde2..c7ec6bf 100644
    a b function get_transient( $transient ) { 
    613613        if ( false !== $pre )
    614614                return $pre;
    615615
    616         if ( wp_using_ext_object_cache() ) {
    617                 $value = wp_cache_get( $transient, 'transient' );
    618         } else {
    619                 $transient_option = '_transient_' . $transient;
    620                 if ( ! defined( 'WP_INSTALLING' ) ) {
    621                         // If option is not in alloptions, it is not autoloaded and thus has a timeout
    622                         $alloptions = wp_load_alloptions();
    623                         if ( !isset( $alloptions[$transient_option] ) ) {
    624                                 $transient_timeout = '_transient_timeout_' . $transient;
    625                                 $timeout = get_option( $transient_timeout );
    626                                 if ( false !== $timeout && $timeout < time() ) {
    627                                         delete_option( $transient_option  );
    628                                         delete_option( $transient_timeout );
    629                                         $value = false;
    630                                 }
     616        $transient_option = '_transient_' . $transient;
     617        if ( ! defined( 'WP_INSTALLING' ) ) {
     618                // If option is not in alloptions, it is not autoloaded and thus has a timeout
     619                $alloptions = wp_load_alloptions();
     620                if ( !isset( $alloptions[$transient_option] ) ) {
     621                        $transient_timeout = '_transient_timeout_' . $transient;
     622                        $timeout = get_option( $transient_timeout );
     623                        if ( false !== $timeout && $timeout < time() ) {
     624                                delete_option( $transient_option  );
     625                                delete_option( $transient_timeout );
     626                                $value = false;
    631627                        }
    632628                }
    633 
    634                 if ( ! isset( $value ) )
    635                         $value = get_option( $transient_option );
    636629        }
    637630
     631        if ( ! isset( $value ) )
     632                $value = get_option( $transient_option );
     633
    638634        /**
    639635         * Filter an existing transient's value.
    640636         *
    function set_transient( $transient, $value, $expiration = 0 ) { 
    679675         */
    680676        $value = apply_filters( 'pre_set_transient_' . $transient, $value, $expiration );
    681677
    682         if ( wp_using_ext_object_cache() ) {
    683                 $result = wp_cache_set( $transient, $value, 'transient', $expiration );
     678        $transient_timeout = '_transient_timeout_' . $transient;
     679        $transient = '_transient_' . $transient;
     680        if ( false === get_option( $transient ) ) {
     681                $autoload = 'yes';
     682                if ( $expiration ) {
     683                        $autoload = 'no';
     684                        add_option( $transient_timeout, time() + $expiration, '', 'no' );
     685                }
     686                $result = add_option( $transient, $value, '', $autoload );
    684687        } else {
    685                 $transient_timeout = '_transient_timeout_' . $transient;
    686                 $transient = '_transient_' . $transient;
    687                 if ( false === get_option( $transient ) ) {
    688                         $autoload = 'yes';
    689                         if ( $expiration ) {
    690                                 $autoload = 'no';
     688                // If expiration is requested, but the transient has no timeout option,
     689                // delete, then re-create transient rather than update.
     690                $update = true;
     691                if ( $expiration ) {
     692                        if ( false === get_option( $transient_timeout ) ) {
     693                                delete_option( $transient );
    691694                                add_option( $transient_timeout, time() + $expiration, '', 'no' );
     695                                $result = add_option( $transient, $value, '', 'no' );
     696                                $update = false;
     697                        } else {
     698                                update_option( $transient_timeout, time() + $expiration );
    692699                        }
    693                         $result = add_option( $transient, $value, '', $autoload );
    694                 } else {
    695                         // If expiration is requested, but the transient has no timeout option,
    696                         // delete, then re-create transient rather than update.
    697                         $update = true;
    698                         if ( $expiration ) {
    699                                 if ( false === get_option( $transient_timeout ) ) {
    700                                         delete_option( $transient );
    701                                         add_option( $transient_timeout, time() + $expiration, '', 'no' );
    702                                         $result = add_option( $transient, $value, '', 'no' );
    703                                         $update = false;
    704                                 } else {
    705                                         update_option( $transient_timeout, time() + $expiration );
    706                                 }
    707                         }
    708                         if ( $update ) {
    709                                 $result = update_option( $transient, $value );
    710                         }
     700                }
     701                if ( $update ) {
     702                        $result = update_option( $transient, $value );
    711703                }
    712704        }
    713705