web-dev-qa-db-fra.com

Publiez sur WordPress depuis un autre serveur via PHP

J'ai un site wordpress sur - disons - "site.com" et un autre site "input.com" hébergé dans des endroits complètement différents. Comme son nom l'indique, "input.com" doit être utilisé comme site de saisie avec un formulaire très simple (par exemple: titre et contenu). Les informations saisies doivent ensuite être envoyées à "site.com" et publiées en tant que publication sur un blog, comme si quelqu'un les avait saisies à l'aide du panneau wp-admin.

Habituellement, j'utilise cURL pour cela, mais comme le panneau wp-admin est assez compliqué (connexion et autres éléments), j'ai cherché d'autres moyens de le faire. Malheureusement, l'API wordpress rest semble se limiter à obtenir des données de "site.com" mais n'offre aucune option pour lui envoyer des données. Toutes les autres API que j'ai trouvées ne fonctionnaient pas correctement (ou pas du tout) car elles étaient obsolètes ou mal documentées.

Existe-t-il un moyen simple de le faire sans coder un programme cURL? La chose la plus prometteuse que j'ai trouvée jusqu'à présent est la suivante: https://github.com/HarriBellThomas/Wordpress_PostController Mais je n'ai pas encore réussi à le faire fonctionner. J'apprécierais vraiment votre aide!

Modifier:

<?php

set_time_limit(0);
error_reporting(E_ALL);
ini_set('display_errors', 1);

include("./wp-includes/post.php");

// Create post object
$my_post = array(
  'post_title'    => "test",//wp_strip_all_tags( $_POST['post_title'] ),
  'post_content'  => "teeeeeeeessssssssssttttttttttt",// $_POST['post_content'],
  'post_status'   => 'publish',
  'post_author'   => 1,
  'post_category' => array( 1,2 )
);

// Insert the post into the database
wp_insert_post( $my_post );

?>
1
Julian Freyberg

J'ai finalement réussi à accomplir la tâche en utilisant XML-RPC comme suggéré par denis.stoyanov. Si xmlrpc est installé sur votre serveur, utilisez simplement la fonction wpPostXMLRPC from stackoverflow. Mais gardez à l’esprit que xmlrpc_encode_request () est une fonction expérimentale que vous essayez habituellement d’éviter.

1
Julian Freyberg

Configurez un script sur site.com pour recevoir les données de input.com et utilisez wp_insert_post() pour créer la publication sur site.com.

Le titre, le contenu et d'autres détails de publication sont envoyés à l'aide de la structure de tableau suivante:

$post = array(
  'ID'             => [ <post id> ] // Are you updating an existing post?
  'post_content'   => [ <string> ] // The full text of the post.
  'post_name'      => [ <string> ] // The name (slug) for your post
  'post_title'     => [ <string> ] // The title of your post.
  'post_status'    => [ 'draft' | 'publish' | 'pending'| 'future' | 'private' | custom registered status ] // Default 'draft'.
  'post_type'      => [ 'post' | 'page' | 'link' | 'nav_menu_item' | custom post type ] // Default 'post'.
  'post_author'    => [ <user ID> ] // The user ID number of the author. Default is the current user ID.
  'ping_status'    => [ 'closed' | 'open' ] // Pingbacks or trackbacks allowed. Default is the option 'default_ping_status'.
  'post_parent'    => [ <post ID> ] // Sets the parent of the new post, if any. Default 0.
  'menu_order'     => [ <order> ] // If new post is a page, sets the order in which it should appear in supported menus. Default 0.
  'to_ping'        => // Space or carriage return-separated list of URLs to ping. Default empty string.
  'pinged'         => // Space or carriage return-separated list of URLs that have been pinged. Default empty string.
  'post_password'  => [ <string> ] // Password for post, if any. Default empty string.
  'guid'           => // Skip this and let Wordpress handle it, usually.
  'post_content_filtered' => // Skip this and let Wordpress handle it, usually.
  'post_excerpt'   => [ <string> ] // For all your post excerpt needs.
  'post_date'      => [ Y-m-d H:i:s ] // The time post was made.
  'post_date_gmt'  => [ Y-m-d H:i:s ] // The time post was made, in GMT.
  'comment_status' => [ 'closed' | 'open' ] // Default is the option 'default_comment_status', or 'closed'.
  'post_category'  => [ array(<category id>, ...) ] // Default empty.
  'tags_input'     => [ '<tag>, <tag>, ...' | array ] // Default empty.
  'tax_input'      => [ array( <taxonomy> => <array | string>, <taxonomy_other> => <array | string> ) ] // For custom taxonomies. Default empty.
  'page_template'  => [ <string> ] // Requires name of template file, eg template.php. Default empty.
);  

Laissez l'ID vide pour créer un nouveau poste.

Documentation détaillée sur le WP Codex: https://codex.wordpress.org/Function_Reference/wp_insert_post

0
jdm2112