如何在JoeBlogs Wordpress Wrapper上添加自定义字段

时间:2014-01-07 22:58:35

标签: c# wordpress wrapper xml-rpc joeblogs

我正在尝试使用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上正确使用/添加自定义字段?

1 个答案:

答案 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属性,该对象是一个数组CustomFieldCustomField[]

另外,为了将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存储在自定义字段中(如上所示)。