附件表单域的正式文档

时间:2017-04-25 作者:That Brazilian Guy

我正在尝试使用attachment_fields_to_edit 钩住以在媒体附件上创建新字段。根据new documentation, 其中一个参数是“附件表单字段数组”。

但是,我在文档中找不到关于如何构建此阵列的规范。我发现this page on the Codex, 但提供的示例仅使用value, labelhelps. 我在get_attachment_fields_to_edit, 例如inputhtml, 在一些教程中我看到required.

add_filter(\'attachment_fields_to_edit\', \'new_attachment_field\', 10000, 2);
function new_attachment_field( $form_fields, $post ) {
  $field_value = get_post_meta( $post->ID, \'newfield\', true );
  $form_fields[\'newfield\'] = array(
    \'value\' => $field_value ? $field_value : \'\',
    \'label\' => __( \'New Field\' ),
    \'required\' => true,
    \'input\' => \'textarea\',
    \'html\' => \'<no idea what goes here>\',
    \'???\' => \'???\',
    \'helps\' => __( \'Help message\' )
  );
  return $form_fields;
}
除了html. 我不知道是否还有更多我不知道的参数。

我在哪里可以在官方文件中找到更多信息?

1 个回复
SO网友:Celso Bessa

TL;DR : 我想没有正式完整的文档,甚至在源代码中也没有。html 在$form\\u中,如果您决定不使用提供的选项,则字段用于自定义HTML标记。

Longer Answer:

嘿@22510,我不确定我是否正确理解了你的问题,我猜你真正想知道的是,对于$form\\u字段中的特定项,数组中的强制项是什么,因为它已经存在,所以你不需要创建它,正如你在wp-admin/includes/media.php (如WordPress 4.7.4)

这就带来了正确的答案。在这种情况下,如果没有或几乎没有文档,最好的做法是阅读源代码。但在这种情况下,没有正确记录源代码。糟糕透了。

但如果您遵循代码内部的线索,您将注意到此字段的用途。

第1216-1220行示例:

    \'post_excerpt\' => array(
        \'label\'      => __(\'Caption\'),
        \'input\'      => \'html\',
        \'html\'       => wp_caption_input_textarea($edit_post)
    ),
第1236-1242行:

    \'image_url\' => array(
        \'label\'      => __(\'File URL\'),
        \'input\'      => \'html\',
        \'html\'       => "<input type=\'text\' class=\'text urlfield\' readonly=\'readonly\' name=\'attachments[$post->ID][url]\' value=\'" . esc_attr($image_url) . "\' /><br />",
        \'value\'      => wp_get_attachment_url($post->ID),
        \'helps\'      => __(\'Location of the uploaded file.\')
    )
再往下一点,第1285-1289行:

    $form_fields[\'align\'] = array(
        \'label\' => __(\'Alignment\'),
        \'input\' => \'html\',
        \'html\'  => image_align_input_fields($post, get_option(\'image_default_align\')),
    );
您可以看到,当您创建一个新字段时,如果您不提供input 值,它将使用文本输入类型。如果您确实提供了如下值\'input\' =>\'textarea\' 它将自动创建和文本,但如果\'input\' =>\'html\', 然后告诉WordPress使用您将在中指定的标记html 数组项。

所以,在媒体上。php第1219行和第1285行它们使用两个函数来创建此标记,1239只使用带有一些变量的字符串。

因此,如果要使用普通的textarea字段,则不需要html:

$form_fields[\'newfield\'] = array(
    \'value\' => $field_value ? $field_value : \'\',
    \'label\' => __( \'New Field\' ),
    \'required\' => true,
    \'input\' => \'textarea\',
    \'helps\' => __( \'Help message\' )
);
但是,例如,如果您想要一个预填充了作者姓名的照片信用字段,则可以使用html作为输入键的值,并使用html键的自定义标记字符串:

$form_fields[\'credits\'] = array(
    \'value\' => $field_value ? $field_value : \'\',
    \'label\' => __( \'Photo Credits\' ),
    \'required\' => true,
    \'input\' => \'html\',
    \'helps\' => __( \'Give credits where credit is due.\' ),
    \'html\'  => "<input type=\'text\' class=\'text credits\' name=\'attachments[$post->ID][credits]\' value=\'" . esc_attr( esc_get_the_author_meta( \'user_nicename\', $post->post_author ) ) . "\' /><br />",
);
希望这有帮助。

相关推荐