Re-order media links?

时间:2011-09-02 作者:Elliott

我正在尝试在选择图像时重新排序媒体框中的链接。我想将“用作特色图片”移到“插入帖子”按钮上方。

我还想重命名“用作特色图像”文本?我通过编辑媒体做到了这一点。wp admin/INCLUDES/media中的php文件。php,但我不想每次升级都编辑这个。

是否可以在不必重写整个函数的情况下对元素重新排序?

提前谢谢。

编辑:

基本上,我想把文本移到按钮上方,也许还会像上面其他的一样在左侧添加标签。我还想重命名文本“use as featured image”。

enter image description here

编辑

感谢goto10帮助我做到这一点,下面的代码“起作用”,因为它更改了特征图像的文本和位置。虽然我无法获取附件ID,但它不会保存图像。。。它通过手动键入附件ID来工作。

function custom_attachment_fields_to_edit($form_fields, $post) {
    $form_fields[\'buttons\'] = array(
        \'label\' => \'Banner Image\',
        \'value\' => \'\',
        \'input\' => \'html\'
    );
    $thumbnail = \'\';
    $calling_post_id = 0;
    if (isset($_GET[\'post_id\']))
        $calling_post_id = absint($_GET[\'post_id\']);
    elseif (isset($_POST) && count($_POST))
        $calling_post_id = $post->post_parent;

    $attachment_id = ???        

    $ajax_nonce = wp_create_nonce( "set_post_thumbnail-$calling_post_id" );
    $form_fields[\'buttons\'][\'html\'] = $thumbnail = "<a class=\'\' id=\'wp-post-thumbnail-" . $attachment_id . "\' href=\'#\' onclick=\'WPSetAsThumbnail(\\"$attachment_id\\", \\"$ajax_nonce\\");return false;\'>Set as Banner Image</a>";

    return  $form_fields;
}

add_filter(\'attachment_fields_to_edit\', \'custom_attachment_fields_to_edit\', 11, 2); 
尝试获取附件ID:

$args = array(\'post_type\' => \'attachment\', \'post_parent\' => $_GET[\'post_id\'] ); 
        $attachments = get_posts($args);
        if ($attachments) {
            foreach ( $attachments as $attachment ) {
                $attachment_id = $attachment->ID;
            }
        }

$attachment_id = get_post_meta($_GET[\'post_id\'], \'_wp_attachment_image_id\', true);
$attachment_id = get_post_meta($_GET[\'post_id\'], \'_wp_attachment_url\', true );
还尝试更换$_GET[\'post_id\'] 具有$calling_post_id

关于如何获取附件ID有什么建议吗?我试着从media.php 没有任何运气。

1 个回复
最合适的回答,由SO网友:Dave Romsey 整理而成

编辑:添加了输出附件id的示例。将其分配给变量$attachment\\u id,因为核心代码就是这样引用它的。请注意$post 对象(用于附件)被传递到attachment_fields_to_edit filter, 因此,您可以访问附件的所有属性。

是的,这可以在不修改核心的情况下完成。attachment_fields_to_edit 是您需要的过滤器。

将此添加到您的函数中。php或插件:

add_filter( \'attachment_fields_to_edit\', \'customize_attachment_fields_to_edit\', 11, 2 ); // Note priority 11 to ensure that the customizations are not overridden
    function customize_attachment_fields_to_edit( $form_fields, $post ) {
        $form_fields[\'buttons\'] = array(
                \'label\' => \'\',
                \'value\' => \'\',
                \'input\' => \'html\'
        );
        $attachment_id = $post->ID;
        $form_fields[\'buttons\'][\'html\'] = "<h1>Custom stuff here... Attachment ID: $attachment_id</h1>";

        return  $form_fields;
    }
备注:过滤器attachment_fields_to_edit 应用于line 1147 in \\wp-admin\\includes\\media.php

设置按钮输出的大多数代码都是onlines 1311-1342 in \\wp-admin\\includes\\media.php, 虽然上面有一些变量line 1311 用于确定如何生成未传递到attachment_fields_to_edit filter.

本质上,您需要复制核心代码并将其添加到customize_attachment_fields_to_edit 回调。然后格式化复制的代码以满足您的需要,但请记住,您可能需要自己创建一些VAR($send, 例如,如果确实希望尽可能接近地复制核心代码)。

这里有一个link Andy Blackwell编写的关于定制WP库的教程。

结束

相关推荐

Changing Plugin Load Order

我正在编写一个插件,bar,它依赖于另一个被激活的插件,foo,我需要加载来自foo的函数。通常插件是根据目录名按字母顺序加载的,因此在加载之前先加载bar。如果我将bar目录重命名为zbar,那么它会最后加载并正常工作,但我正在寻找一个更优雅和正确的解决方案。我跟踪了jsdalton\'s method of altering the active_plugins option, 它正在对数组进行重新排序,以将bar放在末尾,但在实例化时,bar仍然无法访问foo的函数。我已经阅读了相关的核心代码——基