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;
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue