switch_to_blog()블로그 ID로 전화 를 걸면 해당 블로그가 실제로 존재하는지 여부를 알 수 없습니다. 이 함수는 항상을 반환합니다 TRUE.
테스트 사례 :
switch_to_blog( PHP_INT_MAX );
$post = get_post( 1 );
restore_current_blog();이로 인해 데이터베이스 오류가 발생하여 사용자에게 노출됩니다. 어떻게 방지 할 수 있습니까?
실제 사용 사례
저는 Multilingual Press 의 수석 개발자였습니다 . 사용자가 게시물을 번역하면 다음과 같은 화면이 나타납니다.

이제 다음이 발생할 수 있습니다.
- 그녀는 게시물을 성공적으로 저장하고 게시물을 계속 번역합니다.
- 네트워크 관리자 인 다른 사용자는 글을 쓰는 동안 독일어 블로그를 삭제합니다.
- 저장을 다시 누르면 데이터베이스 오류가 발생합니다.
그 시나리오를 피하고 싶습니다. 대상 블로그가 있는지 빠르게 확인하려면 어떻게 합니까? switch_to_blog()여러 클래스에서 매우 자주 전화 하므로 속도가 빠릅니다.
답변
검사를 캐시하려는 @GM의 아이디어는 다음 도우미 기능으로 이어졌습니다. 모든 곳에서 사용할 수 있도록 전역 네임 스페이스에 넣었습니다.
이 기능은 블로그 상태가 존재하며 삭제 된 것으로 표시되지 않은 경우 블로그 상태에 대해 아무 것도 말하지 않습니다. 데이터베이스 쿼리는 매우 빠르며 (0.0001 초) 함수 호출 빈도에 관계없이 사이트 ID 당 하나의 쿼리 만 실행합니다.
if ( ! function_exists( 'blog_exists' ) ) {
    /**
     * Checks if a blog exists and is not marked as deleted.
     *
     * @link   http://wordpress.stackexchange.com/q/138300/73
     * @param  int $blog_id
     * @param  int $site_id
     * @return bool
     */
    function blog_exists( $blog_id, $site_id = 0 ) {
        global $wpdb;
        static $cache = array ();
        $site_id = (int) $site_id;
        if ( 0 === $site_id )
            $site_id = get_current_site()->id;
        if ( empty ( $cache ) or empty ( $cache[ $site_id ] ) ) {
            if ( wp_is_large_network() ) // we do not test large sites.
                return TRUE;
            $query = "SELECT `blog_id` FROM $wpdb->blogs
                    WHERE site_id = $site_id AND deleted = 0";
            $result = $wpdb->get_col( $query );
            // Make sure the array is always filled with something.
            if ( empty ( $result ) )
                $cache[ $site_id ] = array ( 'do not check again' );
            else
                $cache[ $site_id ] = $result;
        }
        return in_array( $blog_id, $cache[ $site_id ] );
    }
}용법
if ( ! blog_exists( $blog_id ) )
    return new WP_Error( '410', "The blog with the id $blog_id has vanished." );