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:
parent
990eebf373
commit
583b065e14
|
@ -95,15 +95,6 @@ final class WP_Term {
|
||||||
*/
|
*/
|
||||||
public $count = 0;
|
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.
|
* Stores the term object's sanitization level.
|
||||||
*
|
*
|
||||||
|
@ -166,8 +157,6 @@ final class WP_Term {
|
||||||
foreach ( get_object_vars( $term ) as $key => $value ) {
|
foreach ( get_object_vars( $term ) as $key => $value ) {
|
||||||
$this->$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 ) {
|
public function __get( $key ) {
|
||||||
switch ( $key ) {
|
switch ( $key ) {
|
||||||
case 'data' :
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue