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.

git-svn-id: https://develop.svn.wordpress.org/trunk@35269 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Boone Gorges 2015-10-19 03:11:30 +00:00
parent 990eebf373
commit 583b065e14
1 changed files with 7 additions and 12 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;
}
}