我正在尝试使用JoeBlogs WordPress Wrapper完成字段。
我的代码是:
private void postToWordpress(string title, string postContent,string tags, string aioTitle)
{
string link = this.maskedTextBox1.Text;
string username = this.maskedTextBox2.Text;
string password = this.maskedTextBox3.Text;
var wp = new WordPressWrapper(link + "/xmlrpc.php", username, password);
var post = new Post();
post.Title = title;
post.Body = postContent;
post.Tags = tags.Split(',');
string[] cf = new CustomField(); //{ ID = "name", Key = "aiosp_title", Value = "All in One SEO Title" };
cf.ID = "name";
cf.Key = "aiosp_title";
cf.Value = "All in One SEO Title";
post.CustomFields[0] = cf;
wp.NewPost(post, false);
}
错误就在这一行:
post.CustomFields[0] = cf;
它是:
类型'System.NullReferenceException'的未处理异常 发生在JoeBlogsWordpressWrapperTests.exe
中附加信息:对象引用未设置为的实例 对象
那么,如何使用JoeBlogs WordPress Wrapper从C#Application在WordPress上正确使用/添加自定义字段?
答案 0 :(得分:2)
以下代码修复了您的NullReferenceException
,并成功将自定义字段保存到Wordpress中的Post
。
private void postToWordpress(string title, string postContent,string tags, string aioTitle)
{
string link = this.maskedTextBox1.Text;
string username = this.maskedTextBox2.Text;
string password = this.maskedTextBox3.Text;
var wp = new WordPressWrapper(link + "/xmlrpc.php", username, password);
var post = new Post();
post.Title = title;
post.Body = postContent;
post.Tags = tags.Split(',');
var cfs = new CustomField[]
{
new CustomField()
{
// Don't pass in ID. It's auto assigned for new custom fields.
// ID = "name",
Key = "aiosp_title",
Value = "All in One SEO Title"
}
};
post.CustomFields = cfs;
wp.NewPost(post, false);
}
您收到NullReferenceException
错误,因为您正在创建string
数组并尝试为其分配CustomFields
对象的Post
属性,该对象是一个数组CustomField
即CustomField[]
。
另外,为了将CustomFields
保存到数据库中的Post
,您只应传入Key
的{{1}}和Value
字段} CustomField
并一起跳过struct
字段。 Wordpress的原因是自动生成ID
字段(也是数据库中的ID
/数字字段)。我认为这导致integer
调用失败,但我们没有得到任何错误。
尝试上面的代码,它应该可以工作(我已经在我的localhost WAMP Wordpress安装上工作了。)
最后一点说明。虽然XmlRpc
的名称属性称为CustomField
,但它不必是唯一的,并且不会强制执行唯一性。例如,如果您使用Key
填充list of cities
的自定义下拉框,则可以将Post
作为一组自定义字段,如下所示。
list of cities
这也将保存到帖子中,其中2个自定义字段具有相同的 var cfs = new CustomField[]
{
new CustomField()
{
Key = "aiosp_title",
Value = "All in One SEO Title"
} ,
new CustomField()
{
Key = "this is another custom field with HTML",
Value = "All in One SEO Title <br/> Keyword 1 <br/><p>This is some more text and html</p>"
} ,
new CustomField()
{
Key = "list_of_cities",
Value = "San Francisco"
} ,
new CustomField()
{
Key = "list_of_cities",
Value = "New York"
}
};
值和Key
字段值中的不同文本。
最后但并非最不重要的是,您也可以将HTML存储在自定义字段中(如上所示)。