基于附件元数据的“Insert Into Post”更改行为

时间:2012-03-28 作者:k3davis

对于我正在使用的自定义插件,我已将一个复选框元素添加到附件编辑器中,其方式与此处提供的答案类似:

How to add a checkbox element to attachments editor with example

我想做的是,根据该复选框的值,改变“插入帖子”按钮的行为。例如,如果未选中该复选框,“插入帖子”将对文件类型执行默认的WordPress操作。如果选中此框,请插入我的插件快捷码。我尝试了以下方法(基于答案here):

function my_media_insert($html, $id, $caption, $title, $align, $url, $size, $alt) {
    $orig_html = $html;

    $attachment = get_post($id);
    $my_meta = get_post_meta($post->ID, \'_myMeta\', true); // try to get checkbox value

    $mime_type = $attachment->post_mime_type;
    if (($mime_type == "application/pdf") && ($my_meta == "1")) {
        $src = wp_get_attachment_url( $id );
        $html = \'[shortcode url="\'.$src.\'"]\';  
    } else {
        $html = $orig_html;
    }
    return $html;
}
add_filter(\'media_send_to_editor\', \'my_media_insert\', 20, 3);
。。。但是get\\u post\\u meta()似乎从未返回任何值来使用。(如果出于测试目的将$html的值更改为$my\\u meta,则插入为“空白”。)

简短版本:是否有一种方法可以通过复选框在附件上设置元数据,并更改发送给编辑器的$html的值作为响应?

更新:我发现一个示例基本上完成了我想要做的事情(更改按钮的行为),但我想对其进行调整,在附件元数据上添加一个复选框,该复选框可以对每个文件执行此操作,而不是一直对每个文件执行此操作。这样,可以在需要时覆盖该行为,并且我只能将其应用于特定的文件类型。

http://justingable.com/2008/10/03/modifying-wordpress-default-method-for-inserting-media/

1 个回复
SO网友:k3davis

如果这对其他人有帮助,下面是我的代码实现这一点的样子。根据tbuteler的建议,我最终根本没有保存附件数据,但我发现我可以直接使用$附件数组,而不是使用$请求:

function my_attachment_fields_to_edit( $form_fields, $post ) {
    $supported_exts = supported_types(); // array of mime types to show checkbox for

    if ( in_array( $post->post_mime_type, $supported_exts ) ) {
        // file is supported, show fields
        $use_sc = true; // check box by default (false not to, or use other criteria)

        $checked = ( $use_sc ) ? \'checked\' : \'\';

        $form_fields[\'use_sc\'] = array(
            \'label\' =>  \'Use SC\',
            \'input\' =>  \'html\',
            \'html\'  =>  "<input type=\'checkbox\' {$checked} name=\'attachments[{$post->ID}][use_sc]\' id=\'attachments[{$post->ID}][use_sc]\' /> " . __("Insert shortcode instead of link", "txtdomain"),
            \'value\' =>  $use_sc
        );
    }

    return $form_fields;
}

function my_media_insert( $html, $id, $attachment ) {
    if ( isset( $attachment[\'use_sc\'] ) && $attachment[\'use_sc\'] == "on" ) {
        $output = \'[shortcode url="\'.$attachment[\'url\'].\'"]\';
        return $output;
    } else {
        return $html;
    }
}

// add checkbox to attachment fields
add_filter( \'attachment_fields_to_edit\', \'my_attachment_fields_to_edit\', null, 2 );

// insert shortcode if checkbox checked, otherwise default (link to file)
add_filter( \'media_send_to_editor\', \'my_media_insert\', 20, 3 );
EDIT 1/2013: This solution no longer works in WordPress 3.5+. 附件屏幕上的复选框发送AJAX请求以保存附件元数据。鉴于此,似乎再也没有办法将复选框仅仅用作附件屏幕上的“标志”。如果有人找到另一个解决方案,我会很高兴地更改已批准的答案!

结束

相关推荐

How to execute a shortcode?

我有一个WordPress选项,可以存储一些数据,例如:<h1>Header</h1> <p>Paragraph</p> [shortcodesomething/] [shortcode]Contents[/shortcode] 我正在使用显示此选项的值echo get_option(\'my_option\'));.当然,短代码不起作用,我想知道如何迫使他们做他们应该做的事情?echo do_shortcode(get_o