使用XML-RPC从媒体获取图像总数

时间:2015-12-16 作者:Amit Patel

我的媒体库中有大量图像,所以我在Ruby on Rails应用程序中通过分页来访问图像块。我将页码和偏移量传递给wp.getMediaLibrary API并返回固定数量的图像。因此,计算返回的图像是无用的。

下面是我获取图像总数的方法。

如果我们打电话wp.getMediaLibrary 没有经过numberoffset, 它将返回所有图像,我们可以从结果中获得图像数。

但这种方法的问题是,站点有大量图像,因此服务器端出现问题,API返回空响应。

谁能告诉我如何在不获取所有图像信息的情况下获取图像数量?

2 个回复
SO网友:jgraup

VERSION 1 将查询所有图像,并通过检查返回数组的大小来进行计数。VERSION 2 是由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 - 对于一个完整的XML-RPC 解决方案,创建自定义方法。

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); 
}
然后执行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>\';
}
<小时>UPDATE 正在合并@birgire\'s 这个问题的解决方案。

<小时>

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

SO网友:Viren Dave

我认为WordPress没有任何函数可以只返回媒体库中的图像数。

我不熟悉XML RPC,但基于this postthis post, 我认为您可以添加自定义方法。

如果适用,则可以使用以下查询从媒体库获取图像计数:

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;

相关推荐

使用wp-Migrate-db-proMedia Files Add-on迁移后映像路径错误

从现有生产站点创建临时站点时遇到问题。使用WP Migrate DB Pro 1.8.1和media files add-on v1提取媒体文件时。4.9,我可以使用原始站点的媒体成功地填充媒体库,但无论出于何种原因,所有路径都是错误的-因此,带有指向/wordpress/wp-content/uploads/.../ 找不到,因为图像已全部拉入/app/uploads/2018/.../.如果有人遇到这个问题并找到了解决方案,请让我知道(除了重新上传每个图像…这个特定的网站有大约3000个图像)。谢谢