web-dev-qa-db-fra.com

XMLRPC Éviter le contenu en double

Je veux éviter le contenu en double en postant via xmlrpc. Alors:

si poste existe rien ne se passe .... si n'existe pas, l'insertion de données a lieu ....

La méthode de vérification serait le titre ou le contenu du message. J'ai vu cette solution mais cela ne semble pas fonctionner.

2
David Peterson

Puisque vous ajoutez une référence à ma réponse précédente, laissez-moi vous raconter comment je l’ai testée:

Installation sur site A - Client XML-RPC

include_once( ABSPATH . WPINC . '/class-IXR.php' );
include_once( ABSPATH . WPINC . '/class-wp-http-ixr-client.php' );

$client = new WP_HTTP_IXR_CLIENT( 'http://example.tld/xmlrpc.php' ); // <-- Change!
$client->debug = true;

$result = $client->query( 
    'wp.newPost', 
    [
        0,
        "username",    //<-- Change!
        "password",    //<-- Change!
        [
            'post_status'  => 'draft',
            'post_title'   => 'xml-rpc testing',
            'post_content' => 'hello xml-rpc! Random: ' . Rand( 0, 999 ),
        ]
    ]
);

où vous devez modifier le chemin /, nom d'utilisateuret mot de passeen fonction de vos besoins.

Si je me souviens bien, cet excellent article d'Eric Mann m'a aidé en ce qui concerne le code d'installation du client, lorsque j'ai testé mon plugin l'année dernière. .

Installation sur site B - Serveur XML-RPC

Ici, nous ajoutons le plugin suivant:

<?php
/**
 * Plugin Name: Avoid XML-RPC Post Title Duplication
 * Description: Prevent duplicate posts when doing wp.newPost via XML-RPC
 * Plugin URI:  http://wordpress.stackexchange.com/a/157261/26350
 */

add_action ('xmlrpc_call', 'wpse_xmlrpc_call' );  /////

function wpse_xmlrpc_call( $method )
{
    if( 'wp.newPost' === $method )
        add_filter( 'xmlrpc_wp_insert_post_data', 'wpse_xmlrpc_wp_insert_post_data' );
}////

function wpse_xmlrpc_wp_insert_post_data( $post_data )
{
    // Check if the post title exists:
    $tmp = get_page_by_title( 
        $post_data['post_title'], 
        OBJECT, 
        $post_data['post_type'] 
    );

    // Go from 'insert' to 'update' mode within wp_insert_post():
    if( is_object ( $tmp ) )
        $post_data['ID'] = $tmp->ID; 

    return $post_data;  
}

Des tests

Avant d'activer notre plugin:

Si le client A crée trois articles avec le même titre, mais avec un contenu différent, ils s'afficheront ainsi sur le site B:

before

Nous voyons ici que ces trois publications sont toutes créées sur le serveur B en tant que nouvelles publications.

Après avoir activé notre plugin:

Maintenant, si le client A crée une publication, il apparaîtra sur le serveur B comme ceci:

after2

Ensuite, le client A crée un autre article, avec le même titre, mais un contenu différent. Maintenant le post précédent est modifié:

after3

La liste de messages apparaîtra comme ceci:

after1

nous avons donc évité les doublons après publication.

Remarques

Assurez-vous que XML-RPC est activé sur le site B.

4
birgire