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.
Puisque vous ajoutez une référence à ma réponse précédente, laissez-moi vous raconter comment je l’ai testée:
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. .
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;
}
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:
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:
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é:
La liste de messages apparaîtra comme ceci:
nous avons donc évité les doublons après publication.
Assurez-vous que XML-RPC est activé sur le site B.