WPSEO_Upgrade::remove_indexable_rows_for_non_public_post_types
Removes all indexables for posts that are not publicly viewable. This method should be called after init, because post_types can still be registered.
Метод класса: WPSEO_Upgrade{}
Хуков нет.
Возвращает
null. Ничего (null).
Использование
$WPSEO_Upgrade = new WPSEO_Upgrade(); $WPSEO_Upgrade->remove_indexable_rows_for_non_public_post_types();
Код WPSEO_Upgrade::remove_indexable_rows_for_non_public_post_types() WPSEO Upgrade::remove indexable rows for non public post types Yoast 27.5
public function remove_indexable_rows_for_non_public_post_types() {
global $wpdb;
// If migrations haven't been completed successfully the following may give false errors. So suppress them.
$show_errors = $wpdb->show_errors;
$wpdb->show_errors = false;
$indexable_table = Model::get_table_name( 'Indexable' );
$included_post_types = YoastSEO()->helpers->post_type->get_indexable_post_types();
if ( empty( $included_post_types ) ) {
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches.
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way.
$wpdb->query(
$wpdb->prepare(
"DELETE FROM %i
WHERE %i = 'post'
AND %i IS NOT NULL",
[ $indexable_table, 'object_type', 'object_sub_type' ],
),
);
}
else {
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches.
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way.
$wpdb->query(
$wpdb->prepare(
"DELETE FROM %i
WHERE %i = 'post'
AND %i IS NOT NULL
AND %i NOT IN ( " . implode( ', ', array_fill( 0, count( $included_post_types ), '%s' ) ) . ' )',
array_merge(
[
$indexable_table,
'object_type',
'object_sub_type',
'object_sub_type',
],
$included_post_types,
),
),
);
}
$wpdb->show_errors = $show_errors;
}