Intereting Posts
WordPress / страница / 2 не работает Сортировка основного запроса в подкатегориях / терминах? Как я могу предотвратить создание термина при создании hook_view? Создание вкладок внутри плагинов Страница администратора установить файлы cookie или сообщить системе, что пользователь находится на сайте Дайте редакторам доступ к определенному плагину – включите «admin.php» в «edit.php» API WordPress JSON ограничивает определенный домен Символы Unicode отображаются как? после импорта с помощью WP Clone В чем разница между current_page_parent и current_page_ancestor? Как ifttt.com аутентифицирует предоставленную учетную запись WordPress Отключить плагин на странице администратора Как я могу позиционировать кнопки ShareThis вручную при использовании подключаемого модуля? Как включить редактор содержимого в качестве недоступной цели с помощью jQuery-ui? Добавление поля в профиль «Имя» Страница не найдена для пользовательского плагина и таксономии пользовательского типа post

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

У меня есть сайт с 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 .