wp-query – Alternativa amigable con la memoria PHP a get_posts ()

Pregunta:

Estaba teniendo problemas de memoria con esto:

get_posts( array( 'posts_per_page' => '-1', 'post_type' => array( 'product', 'product_variation' ) )

(hay miles de resultados) simplemente tratando de obtener una lista de todos los ID de publicación.

El siguiente código toma 10 productos a la vez, para evitar con suerte cualquier límite de memoria. Parece funcionar bien, pero probablemente haya una solución más elegante.

https://gist.github.com/dtbaker/acd15e542d98bff68034

$product_page = 1;
$product_per_page = 10;
$product_query = new WP_Query( array(
    'posts_per_page' => $product_per_page,
    'paged'          => $product_page,
    'post_type'      => array( 'product', 'product_variation' ),
) );
$product_ids = array();
while($product_query->have_posts() ) {
    $product_result = $product_query->next_post();
    if(!$product_result){
        // get the next lot of results.
        $product_page++;
        $product_query = new WP_Query( array(
            'posts_per_page' => $product_per_page,
            'paged'          => $product_page,
            'post_type'      => array( 'product', 'product_variation' ),
        ) );
    }else{
        $product_ids[] = $product_result->ID;
    }
}
print_r($product_ids);

Me encantaría saber si hay una mejor manera de hacer esta consulta de "10 productos a la vez". ¡Gracias!

Respuesta:

Use el argumento de los fields para obtener solo la ID; le ahorrará una tonelada de memoria;)

$product_ids = get_posts(
    array(
        'posts_per_page' => -1,
        'post_type'      => array( 'product', 'product_variation' ),
        'fields'         => 'ids',
    )
);

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım