Don't store `data` as a property on `WP_Term` objects.

`wp_ajax_add_term()` fetches a term using `get_term()`, and passes the term to
`WP_Ajax_Response`, which expects each of the term's properties to be scalar.
Having `$data` as a `stdClass` (meant to mimic `WP_User::data`, populated by
a `get_row()` database query) violated this expectation, causing fatal string
conversion errors. As a workaround, `$term->data` is converted so that it is
no longer an actual property of the term object, but is assembled only when
requested in the magic `__get()` method.

Fixes #34348.
Built from https://develop.svn.wordpress.org/trunk@35269


git-svn-id: http://core.svn.wordpress.org/trunk@35235 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Boone Gorges 2015-10-19 03:12:24 +00:00
parent 2543ffbbae
commit 9cc7660c53
2 changed files with 8 additions and 13 deletions

View File

@ -95,15 +95,6 @@ final class WP_Term {
*/
public $count = 0;
/**
* Info about the term, as stored in the database.
*
* @since 4.4.0
* @access protected
* @var array
*/
protected $data = array();
/**
* Stores the term object's sanitization level.
*
@ -166,8 +157,6 @@ final class WP_Term {
foreach ( get_object_vars( $term ) as $key => $value ) {
$this->$key = $value;
}
$this->data = sanitize_term( $term, $this->taxonomy, $this->filter );
}
/**
@ -205,7 +194,13 @@ final class WP_Term {
public function __get( $key ) {
switch ( $key ) {
case 'data' :
return sanitize_term( $this->{$key}, $this->data->taxonomy, 'raw' );
$data = new stdClass();
$columns = array( 'term_id', 'name', 'slug', 'term_group', 'term_taxonomy_id', 'taxonomy', 'description', 'parent', 'count' );
foreach ( $columns as $column ) {
$data->{$column} = isset( $this->{$column} ) ? $this->{$column} : null;
}
return sanitize_term( $data, $data->taxonomy, 'raw' );
break;
}
}

View File

@ -4,7 +4,7 @@
*
* @global string $wp_version
*/
$wp_version = '4.4-alpha-35268';
$wp_version = '4.4-alpha-35269';
/**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.