web-dev-qa-db-fra.com

Comment activer wpautop pour le contenu XMLRPC

J'utilise le support XMLRPC de Wordpress .

Le contenu récupéré via un client XMLRPC ne possède pas les balises <p> ajoutées automatiquement, contrairement aux pages rendues sur le blog de l'installation Wordpress.

Existe-t-il un moyen simple d’obtenir les balises <p> en passant par le contenu XMLRPC?

5
quickshiftin

Ainsi, la fonction xmlrpc get_post par défaut ne contient aucun filtre de Nice. La solution: lancez votre propre rappel XML-RPC!

Accrochez-vous dans xmlrpc_methods et ajoutez une méthode personnalisée, appelée ici post_autop. La clé du tableau sera le nom de la méthode et la valeur le rappel de la méthode.

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

Ensuite, nous avons notre fonction de rappel, qui recevra un tableau de $args. Ce qui fera quelques choses simples: connectez-vous à l'utilisateur (validez le nom d'utilisateur/mot de passe), puis récupérez le message que vous voulez, remplacez le texte par une version autop, et renvoyez le message.

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

Vous pouvez, bien sûr, faire toute la personnalisation que vous voulez à la publication avant de renvoyer la valeur. Voici ce qui précède en tant que plugin .

J'ai utilisé un peu de Python pour tester cela.

>>> 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
chrisguitarguy