web-dev-qa-db-fra.com

Créez des publications en utilisant Importer> RSS/WXR/XML et transmettez des valeurs à des champs personnalisés.

Mon problème est simple. J'ai besoin de faire beaucoup de messages contenant l'URL de l'image pour une page "galerie de photos". J'ai beaucoup lu sur la création de publications à partir de flux RSS et d'import. J'ai réussi à créer des publications, mais je ne peux pas en quelque sorte passer une valeur à un type personnalisé. La galerie a besoin de deux URL, une pour la vignette de l’image et une pour la taille réelle. Le code que j'utilise ressemble à ceci;

<?xml version="1.0" encoding="UTF-8" ?>
<!-- generator="WordPress/3.2.1" created="2011-11-14 01:56" -->
<rss version="2.0"
xmlns:excerpt="http://wordpress.org/export/1.1/excerpt/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:wp="http://wordpress.org/export/1.1/">
<item>
    <title>Pavers 1</title>
    <description></description>
    <Category>Flooring</Category>
    <Category>Pavers</Category>
<wp:postmeta>
    <wp:meta_key>port_large_image_url</wp:meta_key>
    <wp:meta_value>images/portfolio/architectural.elements/Pavers.1.jpg</wp:meta_value>
</wp:postmeta>
</item>
<item>
    <title>Swimming Pools 1</title>
    <description></description>
    <Category>Flooring</Category>
    <Category>Swimming Pools</Category>
<wp:postmeta>
    <wp:meta_key>port_large_image_url</wp:meta_key>
    <wp:meta_value>images/portfolio/architectural.elements/Swimming.Pool.Decks.1.jpg</wp:meta_value>
</wp:postmeta>
</item>
</channel>
</rss>

J'ai confirmé les méta-clés lorsque j'ai exporté des publications et examiné le fichier XML généré. Donc je sais que je dois être proche! Evidemment je manque quelque chose.

Une question pour aller avec cela; Si je comprends cela correctement, un champ personnalisé correspond-il aux "méta-clés"? Est-ce correct?

J'ai près de 1000 images pour lesquelles je dois créer des articles individuels, avec descriptions et catégories. Si je pouvais les "grouper", je gagnerais beaucoup de temps et éliminerais la forte probabilité d'erreur humaine. Je serais vraiment reconnaissant à toute aide ou direction dans la bonne direction.

2
frankV

J'ai cherché et lu sans relâche jusqu'à trouver une réponse! Il s'avère que la bonne chose à utiliser est en fait l'API MetaWeblog et XMLRPC, que vous devrez activer car elle est désactivée par défaut. Tout d’abord, visitez le menu Paramètres de votre panneau d’administration et accédez à "Écriture". Faites défiler la liste jusqu'à la case à cocher XML-RPC sous "Publication à distance". Une fois que cela est enregistré, votre ensemble est à peu près tout.

Vous devrez exporter les publications, puis lire ce fichier XML pour obtenir les méta-noms de vos champs personnalisés spécifiques. Voici le code que j'ai utilisé:

<?php
$BLOGURL = "your.wordpress.root/folder";
$USERNAME = "your_uesername";
$PASSWORD = "your_password";

function get_response($URL, $context) {
if(!function_exists('curl_init')) {
die ("Curl PHP package not installed\n");
}

/*Initializing CURL*/
$curlHandle = curl_init();

/*The URL to be downloaded is set*/
curl_setopt($curlHandle, CURLOPT_URL, $URL);
curl_setopt($curlHandle, CURLOPT_HEADER, false);
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
curl_setopt($curlHandle, CURLOPT_POSTFIELDS, $context);

/*Now execute the CURL, download the URL specified*/
$response = curl_exec($curlHandle);
return $response;
}

/*Creating the metaWeblog.newPost request which takes on five parameters
blogid,
username,
password*/

/*The title of your post*/
$title = "Sample Post Title with Custom Fields";

 /*The contents of your post*/
 $description = "a collection lorem ipsums";

/*Forming the content of blog post*/
$content['title'] = $title;
$content['description'] = $description;
$content['categories'] = array("Uncategorized");
/*Pass custom fields*/
$content['custom_fields'] = array(
    array( 'key' => 'your_custom_feild_meta-key', 'value' => 'place whatever value your custom field requires here' )
    );
/*Whether the post has to be published, false means it will be created as a draft*/
$toPublish = false;
$request = xmlrpc_encode_request("metaWeblog.newPost",
array(1,$USERNAME, $PASSWORD, $content, $toPublish));

/*Making the request to wordpress XMLRPC of your blog, you may have to change this to the correct path for your xmlrpc.php file*/
$xmlresponse = get_response($BLOGURL."/xmlrpc.php", $request);
$response = xmlrpc_decode($xmlresponse);

/*Printing the response on to the console*/
/*If it works, you'll see a number followed by :Post ID*/
echo ":Post ID"; print_r($response);
 echo "\n";
  ?>

Ça y est ...! Maintenant, vous pouvez facilement automatiser la création de ce fichier avec du php, du javascript, du perl ... comme vous voulez! Il n'y a que quelques variables à changer.

2
frankV