Intereting Posts
Изменить метку поля заголовка для сообщений в бэкэнд WP Query работает вне функции, а не внутри функции Проблема с изображениями, когда в URL-адресе нет значения Штрих-код для содержимого сообщения CPT на странице Указание размера при отображении изображения, связанного с таксономией через ACF Как сделать глобальную работу почты с пользовательским типом сообщения? Есть ли совместимый с W3C плагин Share & Follow? WP_Query в functions.php переопределяет глобальный объект $ post, даже с wp_reset_query () Дисплей «BuddyPress Follow» следовать кнопке для не зарегистрированных пользователей ID для сообщений / страниц блога Permalink все еще переведены даже после удаления полиланга Почему этот фильтр не работает при передаче параметров? Как реализовать пользователей пользовательских типов сообщений Проблема Ajax от WordPress с неопределенным URL-адресом Две контактные формы 7 на одной странице

Использование пользовательских таблиц для старых сообщений

У меня есть сайт с 24 000 сообщений и 200 сообщений ежедневно, и база данных скоро станет огромной. Поэтому я планирую перенести старые сообщения в пользовательские таблицы, чтобы уменьшить нагрузку на базу данных. Нет необходимости показывать эти сообщения на сайте. Я сохраню его для поисковых систем и избегаю проблем sql_calc_found_rows . Это три таблицы, которые я создал:

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

Я переместил старые сообщения в эти таблицы вручную, используя phpMyAdmin, и использую функцию, чтобы WordPress использовал мою таблицу сообщений вместо wp_posts если сообщение в ней не существует:

 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"); 

Тем не менее, мои старые должности в этом случае появляются без мета-и таксономических ценностей. Как я могу сделать то же самое с таблицами мета и отношений? Какие-либо предложения?

простое и не идеальное решение, которое сделает большую часть работы для вас, – это переписать имена таблиц следующим образом:

 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; } 

Теперь для полного решения вам нужно будет заменить таблицы в terms_clauses hook для get_terms и получить метаданные из пользовательской таблицы самостоятельно, используя get_post_metadata для get_post_meta .