답변:
강제되지는 않지만 필수입니다.
두 개의 Wordpress 사이트가 동일한 데이터베이스에 설정되어있는 시나리오를 고려하십시오. 하나는 접두사가 wp_
있고 다른 하나는 wp2_
. 접두사를 사용하여 두 사이트 모두에 플러그인을 설치하면 작성된 테이블은 wp_liveshoutbox
첫 번째 사이트와 wp2_liveshoutbox
두 번째 사이트를 위한 것입니다. 그러나 접두사를 생략하면 두 사이트 모두 동일한 이름의 테이블을 사용 liveshoutbox
하게되며 모든 것이 손상됩니다.
다음을 고려하세요:
플러그인은 각 사이트마다 다른 표 접두사를 사용하는 워드 프레스 네트워크에서 사용됩니다. 플러그인은 동일한 데이터베이스에있는 836 개의 다른 사이트에서 동시에 실행될 수 있습니다.wp_385677_liveshoutbox
완벽하게 합리적인 테이블 이름입니다.
플러그인은 보안 개념이있는 사용자가 설치하며 테이블 접두어를 변경하여 봇을 주입하려고 시도합니다. select * from wp_users
하며 시스템 . 그들이 새로운 취약점을 발견하더라도 작동하지 않습니다.
하드 코딩 테이블 이름과 같은 바로 가기를 사용하면 제품을 시작하고 실행할 수 있지만 좋은 방법은 아닙니다. 아주 짧은 시간에 플러그인은 "작동하지 않습니다"라는 주석을 남길 것입니다. 최악의 경우 다른 사람의 사이트를 손상시킬 수 있습니다.
복잡한 쿼리가 있고 작성의 고통을 처리하고 싶지 않으면 'select foo from ' . $wpdb->prefix . '_mytable left join ' . $wpdb->prefix . '_mytablemeta on ' . $wpdb->prefix . '.ID = ' . $wpdb->prefix . '.meta_id ....
교체기를 사용할 수 있습니다. 예를 들면 다음과 같습니다.
$query = 'select foo from %table% left join %meta% on %table%.ID = %meta%.meta_id ... ';
$change = array (
'%table%' => $wpdb->prefix . '_mytable',
'%meta%' => $wpdb->prefix . '_mytablemeta'
);
$sql = str_replace( array_keys( $change ), array_values( $change ), $query );
$results = $wpdb->get_results( $sql );
워드 프레스는 끊임없이 변화하고 있습니다. 오늘날 "작동하는"것은 내일 작동하지 않을 수 있습니다. 이것이 API 함수가있는 이유입니다. Wordpress 개발자는 공개 API 동작이 일관되도록해야합니다 (또는 기능을 감가 상각 할 것임). 내부 메소드 호출이 '빠른 방식'이기 때문에 사용하기 시작하면 일반적으로 다시 물립니다. 소프트웨어에는 진정한 지름길이 거의 없습니다. 필요한 작업을 지금부터 나중에 옮길 수 있으며 신용 카드 "나중에"나중에 더 많은 비용이 듭니다.
$wpdb->prefix . "users"
는 다중 사이트 설치에서 유효하지 않은 테이블을 생성 한다는 것입니다. db 접두사가 테이블에 첨부되기 때문입니다. 그러나 모든 사용자가 네트워크 사용자이므로 다중 사이트는 하나의 사용자 테이블 만 사용합니다. 따라서 쿼리에 wp_users 또는 wp_usermeta 테이블이 포함 된 경우 $wpdb->users
또는 $wpdb->usermeta
각각 을 사용해야합니다 .