Intereting Posts
Форма запроса, как на URL Как отобразить сообщение из текущей таксономии на странице архива? Есть ли способ переопределить тег <title>, указанный в header.php? jQuery стили пользовательского интерфейса, конфликтующие с диалогом TinyMCE Разбиение на страницы с пользовательским запросом, пользовательская форма поиска, одиночные и страницы, ajax и плагины Показывать только будущее событие (расширенные пользовательские поля) Права доступа к файлам на основе подписи под открытым небом в Git получать персонализированные типы сообщений Как добавить имя редактора в запись meta byline? Как добавить способность к роли пользователя? Пользовательские размеры изображений добавляют к метаданным Каков правильный способ размещения в Google Font Loader? Какой URL-адрес вы передаете wp_remote_get для загрузки тела предварительного просмотра текущего сообщения? Запуск wp-cron cronjab напрямую, а не с помощью wget? WordPress – как заменить <! – больше -> на строку на the_content () в single.php

Как уменьшить количество запросов?

У меня есть мета-ключ «Должно» для сообщений …. если пост истек (минус текущая дата или не совпадает с ним), то он не будет отображаться в счетчике. Это мой код, который работает отлично. Моя единственная проблема заключается в том, что он создает более 100 запросов. Есть ли способ уменьшить это число? Я не уверен, как его оптимизировать ….

/** * Function to list all category with thumbnail custom link, etc.. * * How to use this function: * Add in template: <?php my_category_list(); ?> * */ function my_category_list(){ /* LIST OF CATS DATA */ $cats_data = array(); /** * Get Categories * @link http://codex.wordpress.org/Function_Reference/get_categories */ $cat_args = array( 'hide_empty' => 0, 'exclude' => '13,1,1460' ); $categories = get_categories( $cat_args ); /* If category found, load list of category */ if ( !empty( $categories ) ) { $i = 0; /* Foreach category: display the data */ foreach ( $categories as $cat) { /* ======= HTML CLASS ========= */ /* dynamic class (?) need fix */ $class = ( $i % 3 ) ? 'span4' : 'span4'; $classes = $class . ' ' . 'category-' . $cat->term_id; /* ======= POST COUNT ========= */ /* Get all posts in category + in due date * this only to get the post count. * @link http://themehybrid.com/support/topic/issue-with-filtering-due-meta-key */ $query_args = array( 'post_type' => 'post', 'category_name' => $cat->slug, 'meta_query' => array( array( 'key' => 'Due', 'value' => date( 'Ymd' ), 'type' => 'DATE', 'compare' => '>=', // greater than or equal to ) ) ); $my_query = new WP_Query( $query_args ); $post_count = $my_query->found_posts; /* ====== CATEGORY THUMBNAIL ======== */ $thumbnail_id = get_option('seamless_term_thumb_' . $cat->term_id); $image = wp_get_attachment_url($thumbnail_id); /* ====== LINK TO SEARCH: no need fields ======= */ $link_to = 'http://www.scholarships360.org/discover/?search_query=&orderby=blank&tax_category=' . $cat->slug .'&wpas=1'; /* MERGE DATA IN ARRAY */ $cats_data[] = array( 'classes' => $classes, 'post_count' => $post_count, 'image' => $image, 'name' => $cat->name, 'link' => $link_to, ); $i++; } // end foreach /** * NOW THE FUN PART * ================= */ /* Sort Cat Data by Post Count */ usort($cats_data, 'my_sort_cat_data'); /* Cut only 6 item to display */ $cats_data = array_slice( $cats_data, 0, 6 ); /* Display it */ foreach ($cats_data as $cat_data ){ ?> <div class="<?php echo $cat_data['classes'];?>"> <div class="thumb one"> <a href="<?php echo $cat_data['link'] ?>"> <div class="two"><?php echo $cat_data['post_count'] . ' Scholarships' ?></div> </a> <a href="<?php echo $cat_data['link'] ?>"> <img src="<?php echo $cat_data['image']; ?>" alt="<?php echo esc_attr( $cat_data['name'] ); ?>" class="item-image"> </a> </div> <!-- end .thumb --> </div> <?php } } /* No category found */ else { echo '<p>No category found...</p>'; } } /** * Sort Cat Data Helper Function * @link http://stackoverflow.com/questions/2699086/sort-multidimensional-array-by-value-2 */ function my_sort_cat_data( $a, $b ){ return $b['post_count'] - $a['post_count']; } 

Solutions Collecting From Web of "Как уменьшить количество запросов?"

Попробуй это:

 global $wpdb; $num_cat = 6; $query = "SELECT tt.term_taxonomy_id, t.name, COUNT( t.name ), GROUP_CONCAT( p.ID ) , GROUP_CONCAT(m.meta_value) FROM {$wpdb->prefix}term_taxonomy tt NATURAL JOIN {$wpdb->prefix}terms t NATURAL JOIN {$wpdb->prefix}term_relationships tr JOIN {$wpdb->prefix}posts p ON ( tr.object_id = ID ) JOIN {$wpdb->prefix}postmeta m ON ( post_id = ID ) WHERE taxonomy = 'category' AND post_type= 'post' AND post_status= 'publish' AND meta_key = 'Due' AND meta_value > ".date('Ymd'). "GROUP BY name ORDER BY COUNT( name ) DESC LIMIT $num_cat"; $top_cats = $wpdb->get_results($query); foreach ($top_cats as $key => $cat) { $thumbnail_id = get_option('seamless_term_thumb_' . $cat->term_taxonomy_id); $image = wp_get_attachment_url($thumbnail_id); /* ...etc... */ } 

Интуитивно, запрос «первым» получает идентификаторы категорий и их имена из wp_terms_taxonomy и wp_terms, «затем» использует wp_term_relationships для получения сообщений в каждой категории, «затем» фильтрует сообщения по дате, используя wp_postmeta. «Наконец,» результаты группируются и подсчитываются по категориям и сортируются по счету. (Я использую кавычки, потому что менеджер db может выполнить запрос в любом случае, что он хочет, не обязательно в этом порядке).

Для удобства и простоты проверки идентификаторы сообщений в каждой категории и соответствующие им сроки объединяются в одну строку с использованием GROUP_CONCAT из mysql. Просто попробуйте! Затем вы можете удалить его из кода.

Обратите внимание, что вы должны использовать $cat->term_taxonomy_id а не $cat->term_id (что также относится к вашему коду), так как term_id может быть связан с более чем одной таксономией (например, термин с идентичным слизью в разных таксономах). Это может привести к очень неясным ошибкам, именно потому, что это часто остается незамеченным. Термин_taxonomy_id представляет пару (term_id, таксономия), которая гарантированно будет уникальной.

Вы можете уменьшить количество запросов еще больше, добавив thumbnail_id в каждую строку, изменив запрос с помощью дополнительного соединения. Что-то вроде этого (непроверено):

 SELECT ..., o.meta_value as thumbnail_id FROM ... JOIN {$wpdb->prefix}options o ON (o.meta_key = CONCAT('seamless_term_thumb_', tt.term_taxonomy_id)) 

Предположительно, что-то подобное может быть сделано для URL эскиза.