WordPress.org

Make WordPress Core

Ticket #45484: 45484.2.diff

File 45484.2.diff, 3.2 KB (added by timph, 8 months ago)

check if value is serialized for treatment

  • src/wp-includes/class-wp-customize-manager.php

     
    15231523
    15241524                // Options.
    15251525                foreach ( $options as $name => $value ) {
    1526                         if ( preg_match( '/^{{(?P<symbol>.+)}}$/', $value, $matches ) ) {
     1526
     1527                        // Serialize values for search.
     1528                        $value = maybe_serialize( $value );
     1529
     1530                        // Check if value was serialized.
     1531                        if ( is_serialized( $value ) ) {
     1532                                if ( preg_match( '/s:\d+:"{{(?P<symbol>.+)}}"/', $value, $matches ) ) {
     1533                                        if ( isset( $posts[ $matches['symbol'] ] ) ) {
     1534                                                $symbol_match = $posts[ $matches['symbol'] ]['ID'];
     1535                                        } elseif ( isset( $attachment_ids[ $matches['symbol'] ] ) ) {
     1536                                                $symbol_match = $attachment_ids[ $matches['symbol'] ];
     1537                                        }
     1538
     1539                                        // If we have any symbol matches, update the values.
     1540                                        if ( isset( $symbol_match ) ) {
     1541
     1542                                                // Replace found string matches with post ID ints.
     1543                                                $value = str_replace( $matches[0], "i:{$symbol_match}", $value );
     1544                                        } else {
     1545                                                continue;
     1546                                        }
     1547                                }
     1548                        } elseif ( preg_match( '/^{{(?P<symbol>.+)}}$/', $value, $matches ) ) {
    15271549                                if ( isset( $posts[ $matches['symbol'] ] ) ) {
    15281550                                        $value = $posts[ $matches['symbol'] ]['ID'];
    15291551                                } elseif ( isset( $attachment_ids[ $matches['symbol'] ] ) ) {
     
    15331555                                }
    15341556                        }
    15351557
     1558                        // Unserialize values after checking for post symbols, so they can be properly referenced.
     1559                        $value = maybe_unserialize( $value );
     1560
    15361561                        if ( empty( $changeset_data[ $name ] ) || ! empty( $changeset_data[ $name ]['starter_content'] ) ) {
    15371562                                $this->set_post_value( $name, $value );
    15381563                                $this->pending_starter_content_settings_ids[] = $name;
     
    15411566
    15421567                // Theme mods.
    15431568                foreach ( $theme_mods as $name => $value ) {
    1544                         if ( preg_match( '/^{{(?P<symbol>.+)}}$/', $value, $matches ) ) {
     1569
     1570                        // Serialize values for search.
     1571                        $value = maybe_serialize( $value );
     1572
     1573                        // Check if value was serialized.
     1574                        if ( is_serialized( $value ) ) {
     1575                                if ( preg_match( '/s:\d+:"{{(?P<symbol>.+)}}"/', $value, $matches ) ) {
     1576                                        if ( isset( $posts[ $matches['symbol'] ] ) ) {
     1577                                                $symbol_match = $posts[ $matches['symbol'] ]['ID'];
     1578                                        } elseif ( isset( $attachment_ids[ $matches['symbol'] ] ) ) {
     1579                                                $symbol_match = $attachment_ids[ $matches['symbol'] ];
     1580                                        }
     1581
     1582                                        // If we have any symbol matches, update the values.
     1583                                        if ( isset( $symbol_match ) ) {
     1584
     1585                                                // Replace found string matches with post ID ints.
     1586                                                $value = str_replace( $matches[0], "i:{$symbol_match}", $value );
     1587                                        } else {
     1588                                                continue;
     1589                                        }
     1590                                }
     1591                        } elseif ( preg_match( '/^{{(?P<symbol>.+)}}$/', $value, $matches ) ) {
    15451592                                if ( isset( $posts[ $matches['symbol'] ] ) ) {
    15461593                                        $value = $posts[ $matches['symbol'] ]['ID'];
    15471594                                } elseif ( isset( $attachment_ids[ $matches['symbol'] ] ) ) {
     
    15511598                                }
    15521599                        }
    15531600
     1601                        // Unserialize values after checking for post symbols, so they can be properly referenced.
     1602                        $value = maybe_unserialize( $value );
     1603
    15541604                        // Handle header image as special case since setting has a legacy format.
    15551605                        if ( 'header_image' === $name ) {
    15561606                                $name     = 'header_image_data';