web-dev-qa-db-ja.com

正しいGUIDを使用してXML-RPCでワードプレスで新しい投稿を作成しますか?

Wp_insert_postの代わりにXML-RPCを使用して新しい投稿を作成すると、間違ったguid/URLで投稿が作成されます。 XML-RPCではguidはスラッグではなくIDで作成されます。

// Input data
$my_page = array();
$my_page["post_title"] = $alternatename_main;
$my_page["post_content"] = $postcontent;
$my_page["post_excerpt"] = $postexcerpt;
$my_page["post_status"] = "publish";
$my_page["post_date"] = date("Y-m-d H:i:s");
$my_page["post_author"] = 1;
$my_page['post_type'] = 'post';
$my_page["post_name"] = "test1234";

// Local insert
$my_page_id = wp_insert_post($my_page);
$wp_post_data = get_post($my_page_id);
$wp_guid = $wp_post_data->guid;

結果:$ wp_guid = http:// test/site/test1234/

// Insert 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://test/site/xmlrpc.php');

$client -> debug = true; //optional but useful

$username = "yyyyyy";
$password = "xxxxxx";
$params = array(0,$username,$password,$my_page);

$clientresult = $client->query('wp.newPost', $params);

$my_page_id = $client->getResponse();

$wp_guid = get_the_guid($my_page_id);

結果:$ wp_guid = http:// test/site /?p = 12721

私はテストしました:

$wp_post_data = get_post($my_page_id);
$wp_slug = $wp_post_data->post_name;

$my_page_update = array();
$my_page_update["guid"] = "http://test/site/".$wp_slug."/";
$params = array(0,$username,$password,$my_page_id,$my_page_update);
$clientresult = $client->query('wp.editPost', $params);

しかし、うまくいきません。

私が見つけることができる唯一の解決策は生のSQLを使用することです:

UPDATE wp_posts SET guid='"http://test/site/".$wp_slug."/"' WHERE ID=".$my_page_id .";

私は、投稿が異なるguidで作成されている理由を理解できません。両方の投稿が正しいスラグで作成されています。 wp.​​newPostのバグ?誰かが答えを持っていますか?テストは同じワードプレスのインストールで行われます。

2
Torre

これは厄介な問題ですが、次のようにすれば正しいリンクを取得する方法があります。

$my_page_ask = array( 'link', 'guid' );
$params = array(0,$username,$password,$my_page_id, $my_page_ask);
$clientresult = $client->query('wp.getPost', $params);
$post = $client->getResponse();

次の場合、文字列linkに正しいパーマリンクが含まれます。

$my_page["post_status"] = "publish";

ドラフトでは機能せず、文字列guidにはまだ間違った値が含まれています。

1
Torre