J'ai un grand nombre d'images dans la médiathèque et j'accède donc aux images en morceaux via la pagination dans mon application Ruby on Rails. Je passe le numéro de page et l'offset à l'API wp.getMediaLibrary
et renvoie un nombre fixe d'images. Compter les images retournées est donc inutile.
Voici mon approche pour obtenir le nombre total d'images.
Si nous appelons wp.getMediaLibrary
sans passer number
et offset
, toutes les images seront renvoyées et nous pourrons obtenir le nombre d'images à partir des résultats.
Mais le problème avec cette approche est que le site contient un grand nombre d’images et qu’il ya donc un problème avec la fin du serveur et que l’API renvoie une réponse vide.
Quelqu'un peut-il me guider s'il vous plaît comment obtenir le décompte des images sans obtenir toutes les informations sur les images?
VERSION 1interrogera toutes les images et vous donnera un décompte en vérifiant la taille du tableau retourné.VERSION 2est une méthode beaucoup plus rapide introduite par 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- Pour une solution complète XML-RPC , créez une méthode personnalisée.
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);
}
Alors faites le 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>';
}
UPDATEFusion de la solution de @ birgire dans celle-ci.
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');
});