WPSEO_Meta::replace_meta()public staticYoast 1.0

Used for imports, this functions imports the value of $old_metakey into $new_metakey for those post where no WPSEO meta data has been set. Optionally deletes the $old_metakey values.

Метод класса: WPSEO_Meta{}

Хуков нет.

Возвращает

null. Ничего (null).

Использование

$result = WPSEO_Meta::replace_meta( $old_metakey, $new_metakey, $delete_old );
$old_metakey(строка) (обязательный)
The old key of the meta value.
$new_metakey(строка) (обязательный)
The new key, usually the WPSEO meta key (including prefix).
$delete_old(true|false)
Whether to delete the old meta key/value-sets.
По умолчанию: false

Код WPSEO_Meta::replace_meta() Yoast 22.3

public static function replace_meta( $old_metakey, $new_metakey, $delete_old = false ) {
	global $wpdb;

	/*
	 * Get only those rows where no wpseo meta values exist for the same post
	 * (with the exception of linkdex as that will be set independently of whether the post has been edited).
	 *
	 * {@internal Query is pretty well optimized this way.}}
	 */
	$query  = $wpdb->prepare(
		"
			SELECT `a`.*
			FROM {$wpdb->postmeta} AS a
			WHERE `a`.`meta_key` = %s
				AND NOT	EXISTS (
					SELECT DISTINCT `post_id` , count( `meta_id` ) AS count
					FROM {$wpdb->postmeta} AS b
					WHERE `a`.`post_id` = `b`.`post_id`
						AND `meta_key` LIKE %s
						AND `meta_key` <> %s
					GROUP BY `post_id`
				)
			;",
		$old_metakey,
		$wpdb->esc_like( self::$meta_prefix . '%' ),
		self::$meta_prefix . 'linkdex'
	);
	$oldies = $wpdb->get_results( $query );

	if ( is_array( $oldies ) && $oldies !== [] ) {
		foreach ( $oldies as $old ) {
			update_post_meta( $old->post_id, $new_metakey, $old->meta_value );
		}
	}

	// Delete old keys.
	if ( $delete_old === true ) {
		delete_post_meta_by_key( $old_metakey );
	}
}