it-swarm.com.de

mit xml-rpc können Sie die Gesamtzahl der Bilder von Medien abrufen

Ich habe eine große Anzahl von Bildern in der Medienbibliothek, daher greife ich über die Paginierung in meiner Ruby on Rails-Anwendung auf Bilder in Stücken zu. Ich übergebe die Seitenzahl und den Offset an die wp.getMediaLibrary API und es wird eine feste Anzahl von Bildern zurückgegeben. Das Zählen der zurückgegebenen Bilder ist also sinnlos.

Hier ist mein Ansatz, um die Gesamtzahl der Bilder zu erhalten.

Wenn wir wp.getMediaLibrary aufrufen, ohne number und offset zu übergeben, werden alle Bilder zurückgegeben, und wir können die Anzahl der Bilder aus den Ergebnissen abrufen.

Das Problem bei diesem Ansatz ist jedoch, dass die Site über eine große Anzahl von Bildern verfügt und daher auf dem Server ein Fehler auftritt und die API eine leere Antwort zurückgibt.

Kann mir jemand bitte helfen, wie ich die Bilder zählen kann, ohne alle Bildinformationen zu erhalten?

3
Amit Patel

VERSION 1fragt alle Bilder ab und gibt Ihnen eine Zählung, indem Sie die Größe des zurückgegebenen Arrays überprüfen.VERSION 2ist eine viel schnellere Methode, die von birgire eingeführt wurde.

// 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- Erstellen Sie für eine vollständige XML-RPC Lösung eine benutzerdefinierte Methode.

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); 
}

Dann machen Sie den 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>';
}

UPDATEZusammenführen @ birgires Lösung in dieser.


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');
});
1
jgraup