Como ativar o wpautop para conteúdo XMLRPC

5

Estou usando o suporte para XMLRPC do Wordpress .

O conteúdo buscado por meio de um cliente XMLRPC não tem as tags <p> adicionadas automaticamente, enquanto as páginas renderizadas no blog da instalação do Wordpress fazem.

Existe uma maneira fácil de obter também as tags <p> através do conteúdo XMLRPC ?

    
por quickshiftin 08.03.2012 / 02:40

1 resposta

4

Portanto, a função xmlrpc get_post padrão não tem nenhum filtro legal para você usar. A solução: role seu próprio retorno de chamada XML-RPC!

Conecte-se a xmlrpc_methods e adicione um método personalizado, neste caso chamado post_autop . A chave da matriz será o nome do método e o valor do retorno de chamada do método.

<?php
add_filter( 'xmlrpc_methods', 'wpse44849_xmlrpc_methods' );
/**
 * Filters the XMLRPC method to include our own custom method
 */
function wpse44849_xmlrpc_methods( $method )
{
    $methods['post_autop'] = 'wpse44849_autop_callback';
    return $methods;
}

Em seguida, temos nossa função de retorno de chamada, que receberá uma matriz de $args . O que vai fazer algumas coisas simples: registrar o usuário (validar nome de usuário / senha), buscar a postagem desejada, substituir o texto por uma versão com cópia de segurança automática e retornar a postagem.

<?php
function wpse44849_autop_callback( $args )
{

    $post_ID     = absint( $args[0] );
    $username    = $args[1];
    $password    = $args[2];

    $user = wp_authenticate( $username, $password );

    // not a valid user name/password?  bail.
    if( ! $user || is_wp_error( $user ) )
    {
        return false;
    }

    $post = get_posts( array( 'p' => $post_ID ) );

    // no posts?  bail.
    if( empty( $post ) )
    {
        return false;
    }

    $post = $post[0];

    // the magic happens here
    $post->post_content = wpautop( $post->post_content );

    return (array) $post;
}

Você pode, é claro, fazer qualquer personalização que desejar para a postagem antes de retornar o valor. Aqui está o como um plugin acima.

Eu usei um pouco de Python para testar isso.

>>> import xmlrpclib as xmlrpc
>>> s = xmlrpc.ServerProxy('http://localhost/xmlrpc.php')
>>> post = s.post_autop(1, 'admin', 'password')
>>> post
# content of the post here as a Python dict
    
por chrisguitarguy 10.03.2012 / 08:07