自定义帖子类型,禁用字段

时间:2016-03-10 作者:Jordan Ramstad

我有一个插件,可以将来自第三方服务的数据同步到自定义的帖子类型中。其想法是,post类型充当第三方服务的从属服务,因此那里的任何更改都会覆盖wordpress站点上的任何更改。但是,将有一些额外的自定义字段用于将wordpress端的信息添加到第三方服务的数据中。

我所寻找的是一种或多或少禁用将被覆盖的字段(标题、正文、50-60个自定义字段)的方法,只剩下那些不会被覆盖的字段可以编辑。

我知道如何隐藏标题/正文(虽然不确定是否完全删除它们),但我觉得让它们保持可见是有益的,只是灰显/禁用。

这就是我禁用标题/正文的方式:

function remove_edit_fields(){
    remove_post_type_support( \'property_listings\', \'title\' );
    remove_post_type_support( \'property_listings\', \'editor\' );
}

add_action( \'admin_init\', \'remove_edit_fields\' );
是否有任何方法可以做到这一点,同时使它们保持可见,并对自定义字段执行相同的操作?

2 个回复
最合适的回答,由SO网友:Jordan Ramstad 整理而成

为了做到这一点,我必须隐藏默认ACF输出中的字段。在核心中无法做到这一点,下划线可以在其他任何地方禁用输出,但编辑区域是一个例外。

我使用以下代码创建了一个隐藏字段类型,它不输出任何输入,并且隐藏自己的标签。它基于https://github.com/gerbenvandijk/acf-hidden-field

<?php
class acf_field_hidden_field extends acf_field
{
    // vars
    var $settings, // will hold info such as dir / path
        $defaults; // will hold default field options
    /*
    *  __construct
    *
    *  Set name / label needed for actions / filters
    *
    *  @since   3.6
    *  @date    23/01/13
    */
    function __construct()
    {
        // vars
        $this->name = \'hidden_field\';
        $this->label = __(\'Hidden field\');
        $this->category = __("Basic",\'acf\'); // Basic, Content, Choice, etc
        $this->defaults = array(
            // add default here to merge into your field.
            // This makes life easy when creating the field options as you don\'t need to use any if( isset(\'\') ) logic. eg:
            //\'preview_size\' => \'thumbnail\'
        );
        // do not delete!
        parent::__construct();
        // settings
        $this->settings = array(
            \'path\' => apply_filters(\'acf/helpers/get_path\', __FILE__),
            \'dir\' => apply_filters(\'acf/helpers/get_dir\', __FILE__),
            \'version\' => \'1.0.0\'
        );
    }
    /*
    *  create_field()
    *
    *  Create the HTML interface for your field
    *
    *  @param   $field - an array holding all the field\'s data
    *
    *  @type    action
    *  @since   3.6
    *  @date    23/01/13
    */
    function render_field( $field )
    {
        // defaults?
        /*
        $field = array_merge($this->defaults, $field);
        */
        // perhaps use $field[\'preview_size\'] to alter the markup?
        // create Field HTML
        ?>
        <style>div[data-key="<?php echo $field[\'key\'];?>"]{ display: none;}</style>
        <?php
    }
}
// create field
new acf_field_hidden_field();
?>
我还使用自己的自定义元框以我的方式将数据引入。我对字段进行了“标记”,将它们命名为技术上隐藏的字段(如hide_titlehide_desc). 通过使用自定义屏幕,它不会影响常规的前端显示。

SO网友:majick

首先,添加_ “自定义字段”键的开头将使其成为隐藏字段,无法从“post writing”屏幕进行编辑。

即使用_address 而不仅仅是address.

我想这就是你要找的。。?

如果要在写后屏幕上显示这些隐藏字段值(只读),则可能可以添加一个将输出显示的元盒。

相关推荐

如何让`wp-list-table`显示我在Custom-Post中的`Custom-Fields`

一切都好吗<我需要wp-list-table 也要显示custom-fields 在每个custom-post 我有,但我不知道如何做到这一点,在这幅图中,它显示了带有字段的表格:Title, Author and Publication Date: 我想要的是能够选择custom-fields 将出现,例如以下示例Title, Carta, Naipe, Author, and Date of Publication: