Home >Backend Development >PHP Tutorial >How to optimize query_posts to reduce the number of database queries when retrieving WordPress articles?

How to optimize query_posts to reduce the number of database queries when retrieving WordPress articles?

WBOY
WBOYOriginal
2016-08-04 09:21:531376browse

How to optimize the following wordpress code. Currently, it is queried separately, resulting in too many database queries. In fact, what I want to achieve is to obtain the data at one time and output the category name and the number of articles under the category in a loop.

<code><?php  
        $loop_cate_id=array(1,3,8); //指定要输出的分类id 
        $num=10;//指定每次循环输出的文章篇数     
     ?>  
        <?php foreach($loop_cate_id as $key=>$value){ ?> 
            <?php $posts = query_posts($query_string . "&cat={$value}&orderby=date&showposts={$num}" ); ?>  
            <h2><a href="<?php echo get_category_link($value); ?>"><?php single_cat_title(); ?></a></h2> 
            <ul> 
                <?php while(have_posts()) : the_post(); ?> 
                <li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a>    </li> 
                <?php endwhile; ?> 
            </ul>  
        <?php }?> 
    </div> </code>

Reply content:

How to optimize the following wordpress code. Currently, it is queried separately, resulting in too many database queries. In fact, what I want to achieve is to obtain the data at one time and output the category name and the number of articles under the category in a loop.

<code><?php  
        $loop_cate_id=array(1,3,8); //指定要输出的分类id 
        $num=10;//指定每次循环输出的文章篇数     
     ?>  
        <?php foreach($loop_cate_id as $key=>$value){ ?> 
            <?php $posts = query_posts($query_string . "&cat={$value}&orderby=date&showposts={$num}" ); ?>  
            <h2><a href="<?php echo get_category_link($value); ?>"><?php single_cat_title(); ?></a></h2> 
            <ul> 
                <?php while(have_posts()) : the_post(); ?> 
                <li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a>    </li> 
                <?php endwhile; ?> 
            </ul>  
        <?php }?> 
    </div> </code>

Wouldn’t turning on caching solve the problem?

1. The problem now is that there are too many categories. Each category needs to be queried once. Can we first search for all the data of the category on the page? Because it is queried for all and you have requirements for sorting and number of articles, it can be obtained by combining it with group by. Request data. (In this way, there should be only one query for the classified data on the homepage)

2. Then form an array according to the code logic. For the array, you can refer to the format I gave you below.

<code>$postList[cate_id]['title'];
$postList[cate_id]['article'][];//将文章按分类id当成键值存入数组
foreach($postList as $post) {
    foreach($post['article'] as $value){
        
    }
} </code>

Please give it a thumbs up, I hope some friends who are familiar with wp will take a look.

I’m not familiar with wp and I haven’t read your code very much. You can use key-value pairs and just write a loop.
First check all categories to form an array of key-value pairs.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn