Multisite: Use `%s` when building query for `archived` sites in `WP_Site_Query`.

In [25548], the `archived` column in `wp_blogs` was changed from `ENUM` to `TINYINT` to match other status fields. When `WP_Site_Query` was written later, it used `%d` as a placeholder when formatting the archived status.

It is possible that this query will fail for any installations that did not update the schema for `wp_blogs` as only single quoted values are accepted for the `ENUM` type. In this case, `'0'` or `'1'` rather than `0` or `1`.

We can work around this and support both `ENUM` and `TINYINT` in the query by using the `%s` placeholder and casting the value with `absint()`.

Props stephdau.
Fixes #38856. See #27832.


git-svn-id: https://develop.svn.wordpress.org/trunk@41700 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Jeremy Felt 2017-10-03 04:39:08 +00:00
parent bebc4cde6f
commit d4814228dc
1 changed files with 1 additions and 1 deletions

View File

@ -447,7 +447,7 @@ class WP_Site_Query {
if ( is_numeric( $this->query_vars['archived'] ) ) {
$archived = absint( $this->query_vars['archived'] );
$this->sql_clauses['where']['archived'] = $wpdb->prepare( "archived = %d ", $archived );
$this->sql_clauses['where']['archived'] = $wpdb->prepare( "archived = %s ", absint( $archived ) );
}
if ( is_numeric( $this->query_vars['mature'] ) ) {