Как включить wpautop для содержимого XMLRPC


Я использую Wordpress Поддержка XMLRPC .

Контент, загруженный через клиент XMLRPC, не имеет автоматически добавляемых тегов <p>, в то время как страницы, отображаемые в блоге установки Wordpress, имеют.

Есть ли простой способ получить теги <p>, проходящие также через содержимое XMLRPC?

Author: quickshiftin, 2012-03-08

1 answers

Таким образом, функция xmlrpc по умолчанию get_post не содержит хороших фильтров для использования. Решение: откатите свой собственный обратный вызов XML-RPC!

Подключитесь к xmlrpc_methods и добавьте пользовательский метод, в данном случае называемый post_autop. Ключом массива будет имя метода, а значением - обратный вызов метода.

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

Затем у нас есть функция обратного вызова, которая получит массив $args. Который сделает несколько простых вещей: войдите в систему пользователя (подтвердите имя пользователя/пароль), затем получите сообщение, которое мы хотите, замените текст автоматической версией и верните сообщение.

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

Вы, конечно, можете внести любые изменения в публикацию, прежде чем возвращать значение. Вот вышеприведенный в качестве плагина.

Я использовал немного Python, чтобы проверить это.

>>> 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
 4
Author: chrisguitarguy, 2012-03-10 07:07:32