obter o número total de imagens de mídia usando xml-rpc

Eu tenho um grande número de imagens na biblioteca de mídia, então estou acessando imagens em pedaços via paginação no meu aplicativo Ruby on Rails. Eu passo o número da página e o deslocamento para wp.getMediaLibrary API e retorna número fixo de imagens. Então, contar imagens retornadas é inútil.

Aqui está a minha abordagem para obter o número total de imagens.

Se chamamos wp.getMediaLibrary sem passar number e offset , retornará todas as imagens e podemos obter contagem de imagens a partir de resultados.

Mas o problema com esta abordagem é que o site possui grande número de imagens e, portanto, algo corre mal no final do servidor e a API retorna a resposta vazia.

Alguém pode me guiar como obter contagem de imagens sem obter todas as informações de imagens?

Solutions Collecting From Web of "obter o número total de imagens de mídia usando xml-rpc"

A VERSÃO 1 irá consultar todas as imagens e dar-lhe uma contagem, verificando o tamanho da matriz retornada. VERSÃO 2 é um método muito mais rápido introduzido pelo 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 uma solução XML-RPC completa, crie um 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); } 

Então faça o 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:
'; $count = $client->message->params[0]; // our return value is here print_r( $count . ' images total' ); echo '

'; }


UPDATE Combinando a solução @ birgire neste.


 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:
'; $count = $client->message->params[0]; print_r("{$count} total images"); echo '

'; wp_die('FIN'); });

Eu não acho que o WordPress tenha alguma function para retornar apenas a contagem de imagens da Media Library.

Não estou familiarizado com XML RPC, mas com base nesta publicação e nesta publicação , acho que você pode adicionar methods personalizados.

Se funcionar para você, você pode usar a consulta abaixo para obter uma contagem de imagens da Media Library:

 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;