Benutzerdefinierte Tabellen für alte Posts verwenden

Ich habe eine Website mit ungefähr 24.000 Posts und 200 Posts täglich und die database wird bald riesig werden. Daher plane ich, die alten Beiträge in benutzerdefinierte Tabellen zu übertragen, um die databaselast zu reduzieren. Sie müssen diese Beiträge nicht auf der Website anzeigen. Ich werde es für Suchmaschinen behalten und sql_calc_found_rows Probleme vermeiden. Dies sind die drei Tabellen, die ich erstellt habe:

 wp_posts -> wp_custom_posts wp_postmeta -> wp_custom_postmeta wp_term_relationships -> wp_custom_term_relationships 

Ich habe alte Posts mit phpMyAdmin manuell in diese Tabellen übertragen und verwende eine function, um WordPress dazu zu bringen, meine eigene Post-Tabelle anstelle von wp_posts wenn der Post darin nicht existiert:

 function custom_prefix_change($sql) { global $wpdb,$wp; $prefix = $wpdb->prefix; if(is_single()){ //check if the post exists in the genuine posts table $results = $wpdb->get_results($sql,"ARRAY_A"); if($results[0]['ID']){ //if exists then return return $sql; }else{ //else change the query $sql = str_replace("$wpdb->posts","{$wpdb->prefix}custom_posts",$sql); } } //echo $sql; return $sql; } add_action('posts_request',"custom_prefix_change"); 

Meine alten Posts in diesem Fall zeigen jedoch keine Meta- und Taxonomienwerte. Wie kann ich das Gleiche mit den Meta- und Beziehungstabellen tun? Irgendwelche Vorschläge?

Solutions Collecting From Web of "Benutzerdefinierte Tabellen für alte Posts verwenden"

Eine einfache und nicht perfekte Lösung, die den meisten Job für Sie erledigt, ist, die Tabellennamen wie folgt zu überschreiben:

 function custom_prefix_change($sql) { global $wpdb,$wp; $prefix = $wpdb->prefix; if(is_single()){ //check if the post exists in the genuine posts table $results = $wpdb->get_results($sql,"ARRAY_A"); if($results[0]['ID']){ //if exists then return return $sql; }else{ //else change the query $sql = str_replace("$wpdb->posts","{$wpdb->prefix}custom_posts",$sql); $wpdb->term_relationships = $wpdb->prefix . 'custom_term_relationships'; $wpdb->postmeta = $wpdb->prefix . 'custom_postmeta'; } } return $sql; } 

Für eine vollständige Lösung müssen Sie nun die Tabellen im Filter-Hook get_terms für get_terms und die Metadaten aus der benutzerdefinierten Tabelle selbst mit get_post_metadata für get_post_meta .