0

我正在尝试使用 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;

它是:

JoeBlogsWordpressWrapperTests.exe 中发生了“System.NullReferenceException”类型的未处理异常

附加信息:对象引用未设置为对象的实例。

那么,如何使用 JoeBlogs WordPress Wrapper 从 C# 应用程序在 WordPress 上正确使用/添加自定义字段?

4

1 回答 1

2

以下代码修复了您NullReferenceException的自定义字段,并成功地将自定义字段保存到PostWordpress 中。

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对象是CustomFieldie的数组CustomField[]

此外,为了将 保存CustomFieldsPost数据库中,您应该只传递 的KeyValue字段CustomField struct并一起跳过该ID字段。原因是 Wordpress 自动生成ID字段(也是integer数据库中的 / 数字字段)。我认为这就是导致XmlRpc调用失败的原因,但我们没有得到任何关于原因的错误。

试试上面的代码,它应该可以工作(我让它在我的 localhost WAMP Wordpress 安装上工作)。

最后一点。虽然CustomField的 name 属性被称为Key,但它不必是唯一的,并且不强制唯一性。因此,例如,如果您使用list of citiesfor a填充自定义下拉框Post,则可以将其list of cities作为一组自定义字段,如下所示。

    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" 
            } 
        };

这也将保存到帖子中,其中 2 个自定义字段具有相同的Key值和字段值中的不同文本Value

最后但同样重要的是,您还可以将 HTML 存储在自定义字段中(如上所示)。

于 2014-01-07T22:59:52.217 回答