obtener el número total de imágenes de los medios usando xml-rpc

4

Tengo una gran cantidad de imágenes en la biblioteca de medios, así que estoy accediendo a las imágenes en fragmentos a través de la paginación en mi aplicación Ruby on Rails. Paso el número de página y el desplazamiento a wp.getMediaLibrary API y devuelve un número fijo de imágenes. Por lo tanto, no es útil contar las imágenes devueltas.

Este es mi enfoque para obtener el número total de imágenes.

Si llamamos a wp.getMediaLibrary sin pasar number y offset , devolverá todas las imágenes y podemos obtener el recuento de imágenes de los resultados.

Pero el problema con este enfoque es que el sitio tiene una gran cantidad de imágenes y, por lo tanto, algo va mal al final del servidor y la respuesta de retorno de API está vacía.

¿Alguien me puede ayudar a obtener el recuento de imágenes sin obtener toda la información de las imágenes?

    
pregunta Amit Patel 16.12.2015 - 14:39

2 respuestas

1

VERSIÓN 1 consultará todas las imágenes y le dará un recuento al verificar el tamaño de la matriz devuelta. VERSIÓN 2 es un método mucho más rápido introducido por birgire .

// VERSION 1

    $images = get_posts(array(
        'post_type'         => 'attachment',
        'post_status'       => 'any',
        'numberposts'       => -1,
        'fields'            => 'ids',
        'post_mime_type'    => 'image/jpeg,image/gif,image/jpg,image/png',
    ));

    echo count($images) . ' images total';

// VERSION 2

    $count = array_sum( (array) wp_count_attachments( 'image' ) );

    echo "{$count} images total";

ORIGINAL : para una solución completa de XML-RPC , cree un método personalizado.

function xml_add_method( $methods ) {
    $methods['myNamespace.attachmentCount'] = 'get_attachment_count';
    return $methods;
}
add_filter( 'xmlrpc_methods', 'xml_add_method' );

function get_attachment_count( $args ) {
    // good to know it's here
    // global $wpdb; 

    // params passed in the call - not needed in this example
    $params = $args[3];

    // count the posts then return the total value
    $images = get_posts(array(
        'post_type'         => 'attachment',
        'post_status'       => 'any',
        'numberposts'       => -1,
        'fields'            => 'ids',
        'post_mime_type'    => 'image/jpeg,image/gif,image/jpg,image/png',
    ));

    // images total
    return count($images); 
}

Luego haz el RPC

global $current_user;

$user = $current_user->user_login;
$password = $user->data->user_pass;

include_once( ABSPATH . WPINC . '/class-IXR.php' );
include_once( ABSPATH . WPINC . '/class-wp-http-ixr-client.php' );
$xmlrpc_url = home_url('xmlrpc.php');
$client = new WP_HTTP_IXR_CLIENT( $xmlrpc_url );

// set this to true if you need help
// $client->debug = true;

$response = $client->query( 'myNamespace.attachmentCount', array(
    0,
    $user,
    $password,
    array(
        'post_type'         => 'attachment',
        'post_status'       => 'any',
    )
) );

if ( is_wp_error( $response ) ) {
    $error_message = $response->get_error_message();
    echo "Something went wrong: $error_message";
} else {
    echo 'Response:<pre>';        
    $count = $client->message->params[0]; // our return value is here
    print_r( $count . ' images total' );
    echo '</pre>';
}

ACTUALIZACIÓN Fusionando la solución @ birgire en esta.

add_filter('xmlrpc_methods', function ($methods) {
    $methods['myNamespace.getTotalImageCount'] = 'rpc_myNamespace_getTotalImageCount';
    return $methods;
});

function rpc_myNamespace_getTotalImageCount($args)
{
    return array_sum((array)wp_count_attachments('image'));
}

add_action('parse_request', function () {

    // PULL USER CREDS FROM CURRENT USER
    global $current_user;

    $user = $current_user->user_login;
    $password = $user->data->user_pass;

    include_once(ABSPATH . WPINC . '/class-IXR.php');
    include_once(ABSPATH . WPINC . '/class-wp-http-ixr-client.php');
    $xmlrpc_url = home_url('xmlrpc.php');
    $client = new WP_HTTP_IXR_CLIENT($xmlrpc_url);

    // CALL OUR CUSTOM METHOD
    $response = $client->query('myNamespace.getTotalImageCount', array(0, $user, $password));

    echo 'Response:<pre>';
    $count = $client->message->params[0];
    print_r("{$count} total images");
    echo '</pre>';

    wp_die('FIN');
});
    
respondido por el jgraup 16.12.2015 - 18:11
-3

No creo que WordPress tenga ninguna función para devolver solo el recuento de imágenes de la Biblioteca multimedia.

No estoy familiarizado con XML RPC, pero estoy basado en esta publicación y esta publicación , creo que puede agregar métodos personalizados.

Si funciona para usted, entonces puede usar la siguiente consulta para obtener un recuento de imágenes de la Biblioteca de medios:

global $wpdb;

$wpquery = $wpdb->get_results(
    "SELECT COUNT(*) FROM wp_posts WHERE post_type ='attachment' AND post_status = 'inherit'"
);
$count = mysql_fetch_array( $wpquery );

$wpdb->get_results( 
    "SELECT * FROM wp_posts WHERE post_type ='attachment' AND post_status = 'inherit'" 
);
$count = $wpdb->num_rows;
    
respondido por el Viren Dave 18.12.2015 - 20:27

Lea otras preguntas en las etiquetas