wp_check_for_changed_slugs

函数
wp_check_for_changed_slugs ( $post_id, $post, $post_before )
参数
  • (int) $post_id Post ID.
    Required:
  • (WP_Post) $post The post object.
    Required:
  • (WP_Post) $post_before The previous post object.
    Required:
定义位置
相关方法
wp_check_for_changed_dateswp_check_locked_postswp_cache_get_last_changedwp_check_filetype_and_extcheck_import_new_users
引入
2.1.0
弃用
-

wp_check_for_changed_slugs: 这是一个检查文章或页面中已更改的词组的函数。如果有任何变化,它可以用来更新文章或页面的slug。

检查已发布的文章对象是否有改变的标题,并保存旧的标题。

当任何类型的文章对象被更新时,通过比较当前和之前的文章对象,该函数被使用。

如果slug被改变了,并且还没有成为旧slug的一部分,那么它将被添加到文章的元字段(’_wp_old_slug’),用于存储该文章的旧slug。

这个函数最合理的用法是重定向已更改的文章对象,这样,那些链接到已更改的文章的对象将被重定向到新的文章。

function wp_check_for_changed_slugs( $post_id, $post, $post_before ) {
	// Don't bother if it hasn't changed.
	if ( $post->post_name == $post_before->post_name ) {
		return;
	}

	// We're only concerned with published, non-hierarchical objects.
	if ( ! ( 'publish' === $post->post_status || ( 'attachment' === get_post_type( $post ) && 'inherit' === $post->post_status ) ) || is_post_type_hierarchical( $post->post_type ) ) {
		return;
	}

	$old_slugs = (array) get_post_meta( $post_id, '_wp_old_slug' );

	// If we haven't added this old slug before, add it now.
	if ( ! empty( $post_before->post_name ) && ! in_array( $post_before->post_name, $old_slugs, true ) ) {
		add_post_meta( $post_id, '_wp_old_slug', $post_before->post_name );
	}

	// If the new slug was used previously, delete it from the list.
	if ( in_array( $post->post_name, $old_slugs, true ) ) {
		delete_post_meta( $post_id, '_wp_old_slug', $post->post_name );
	}
}

常见问题

FAQs
查看更多 >