2010-08-02 7 views
0

나는 내 WordPress 데이터베이스로 가져온 테이블에서 데이터를 가져 오려고합니다.사용자 정의 테이블이있는 Wordpress 데이터베이스

내 PHP 코드는 모든 기본 wp_ 테이블에서 작동하지만 테이블을 대상으로 할 때 나는 실제로 모든 버그를 잡기를 원합니다.

내 코드 (현재 모든 포스트 제목을 반향하고 그것을 작동)

$liveposts = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->posts 
WHERE post_status = 'publish'")); 

foreach ($liveposts as $livepost) { 
    echo '<p>' .$livepost->post_title. '</p>'; 
} 

내가 다른 데이터베이스에서 세 테이블을 수입, 그리고 예 그들은 꺼내 데이터를해야합니까. 나는 $wpdb->posts이 wp_posts가 될 포스트 테이블을 기대한다는 것을 알았습니다. 그래서 wp_bus_route로 테이블 이름 바꾸기를 시도했습니다 ...하지만 여전히 아무것도 아닙니다.

필자는 phpMyAdmin을 사용하여 대형 데이터베이스 (.sql 형식)에서 3 개의 테이블을 내보내고 가져 왔습니다. phpMyAdmin에서 테이블을보고 모든 데이터를 볼 수 있습니다.

이것은 처음으로 wp 데이터베이스에서 데이터를 가져 오는 것이므로 분명하지 않은 것이 있습니다.

답변

2

봅니다 테이블 이름에 변수를 사용하지 않으려면 : $wpdb->posts는 표준 WP 테이블 작동처럼

$liveposts = $wpdb->get_results($wpdb->prepare("SELECT * FROM wp_bus_route 
WHERE post_status = 'publish'")); 
+0

멋진, 그 트릭 감사를 마쳤습니다 :) 왜이 작품에 대한 모든 생각과 $ wpdb->하지 않습니까? $ wpdb-> bus_routes와 wp_bus_routes 사이의 차이점은 무엇입니까? –

+3

WordPress에 wp-includes/wp-db.php에 설명 된 변수에 $ tables 빌드가 있기 때문에 alloweb 테이블의 이름은 array ('posts', 'comments', 'links', 'options', 'postmeta', \t \t 'terms', 'term_taxonomy', 'term_relationships', 'commentmeta'); 이 배열을 bus_routes에 추가하면 작동하지만 새 버전으로의 Wordpress 업데이트 이후에는 변경 사항이 모두 손실되므로 변수 대신 표의 정적 이름을 사용하십시오. 통찰력 덕분에 – antyrat

+0

감사합니다. 지금 내 머리에 의미가 :) 건배 남자 –

6

테이블의 이름을 참조.

$liveposts = $wpdb->get_results($wpdb->prepare("SELECT * FROM " . $wpdb->prefix . "tablename WHERE post_status = 'publish'")); 

결코, 결코, 결코 하드 코드 접두사 : 사용자 정의 테이블의 경우,이 같은 테이블 이름을 구축 할 수 있습니다. 이것은 wp-config.php에서 변경할 수 있으며 많은 사람들이 wp_이 아닌 다른 것으로 변경합니다. wp_에서 변경하면 보안을 강화할 수 있습니다. 자신의 코드와 자신의 사이트 인 경우에도 $wpdb->prefix은 습관성있게 만들만한 가치가있는 모범 사례입니다.

관련 문제