在定制器中操作POST元

时间:2017-01-13 作者:Radoslav Georgiev

我正在为整个管理中的自定义字段开发一个插件,并尝试为字段创建尽可能多的位置。到目前为止,我在其中相当多的地方成功地做到了这一点:

帖子类型分类法用户评论当然,对于我拥有的每个位置,我都在尝试使用适当的WordPress API-*\\u Post\\u meta、*\\u term\\u meta等。事情进展得很好。

对于与具有URL的项目相关联的位置(主要是前4个,尽管附件也有URL),我有前端表单,允许用户编辑当前项目并保存其自定义字段。我通过一个函数/模板标记来实现这一点,该标记不需要任何参数-与该项关联的所有字段组都会自动显示。

在我认为我的(概念验证)成功之前,我希望拥有的最后一个元素是对定制器的支持。使用默认的API,我可以很容易地使用选项/主题mod,而且我已经到了一个“customizer”位置非常实用的地步。我实现的唯一缺点似乎是,我将整个组的字段显示为一个控件。这允许我有选项卡、条件逻辑和适当的验证(这取决于条件逻辑)。尽管如此,我仍在使用不同的设置(如WP_Customize_Setting), 因此,postMessage和其他一切都可以正常工作,而无需修改任何其他内容。

不过,我想要的是,允许同样的位置(具有URL并且可以具有前端表单)也可以轻松地添加到定制器中。开发人员可以创建一个post元组,它将在编辑屏幕上显示为一个普通的post框,我的目标是允许him调用->show\\u in\\u customizer()之类的内容,以便在那里也使用该组。

我知道很多人会建议不要在customizer中编辑帖子,很多时候我都会同意他们的意见。然而,如果有每篇文章的布局设置,一些颜色选项,甚至像特色图片这样简单的东西,我想让这扇门敞开。

直截了当地说,这似乎是一项相当艰巨的任务,因为它至少需要以下几点:

确定是否在自定义程序中显示责任部分。通过节的“active\\u callback”属性,这非常简单parent.someFunction 加载页面时。这并不理想,但效果很好-我不会多次检索/发送任何值,所以我很高兴。在完美世界中,此功能与active_callback, 将允许用户编辑一个页面,单击指向另一个页面的链接,然后立即编辑新加载的页面。但是,完成此操作后,新页面既不接收请求参数,也不接收包含的标头,因此如果它根本不在自定义程序中,它的作用相当大,因此这对我不起作用get_*_meta 在正常(非postMessage)请求时使用来自定制器的值。这一部分很直截了当

  • 保存数据:这是我的实现失败的地方:(
  • 单击“保存和发布”按钮时,自定义程序执行wp\\U ajax请求。该请求仍然包括正常的customized JSON,作为值更改时的刷新,但由于脚本使用的是admin ajax,我不知道真正保存了什么。

    我现在唯一的想法就是覆盖wp.customize.previewer.query JavaScript函数,其中包含以下内容:

    var query = wp.customize.previewer.query;
    wp.customize.previewer.query = function( options ) {
        args = query.call( wp.customize.previewer, options );
        args.my_plugin_name_current_object = \'post_10\';
        return args;
    }
    
    尽管如此,此时在添加参数时我需要非常小心,但总体而言,实现开始变得太脏了。

    最后,我的问题是:是否有人成功地在customizer中实现了类似的功能?你能告诉我一个完成这件事的正确方法吗?

    到目前为止,我还没有尝试为customizer开发任何定制,而且(虽然我无意冒犯任何人),我很惊讶定制器的某些部分看起来过于复杂/设计过度,而一些非常基本的方面似乎非常不成熟。

    我知道我没有包括任何特定的代码片段,但这个问题似乎足够笼统,至少对我来说是这样。

    提前感谢!

    1 个回复
    SO网友:Weston Ruter

    请参阅Customize Posts 插件。它有一个WP_Customize_Post_SettingWP_Customize_Postmeta_Setting 分别用于在定制器中表示POST和POSTETA。

    相关推荐

    Admin Theme customization

    我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register