如何修改管理员中的“Insert Media”(插入媒体)灯箱,使其只显示某个类别的媒体项目?

时间:2011-02-18 作者:NetConstructor.com

我正在尝试解决媒体库中的一个问题。

本质上,我想做的是“自动”将从自定义帖子类型“编辑帖子”页面上载的媒体分配到预定义的类别。

基于此网站上的其他答案,我发现有很多人在讨论解决方案(下面是其中一个链接),它允许您“手动”为媒体库元素指定类别。然而,我的目的是以某种方式定义特定的职位类型和应该应用的关联类别。

同时,我还希望能够限制“特定帖子类型”,以便在编辑帖子页面请求媒体库灯箱时,“媒体库”仅显示我定义的类别内的项目。

我知道这听起来可能有点混乱,所以让我举个简单的例子。

假设我有一个自定义的帖子类型,叫做“员工新闻”。现在,假设有人继续在这个自定义帖子类型中添加/编辑帖子。让我们进一步假设他现在使用编辑器添加内容,现在想添加一个或多个图像。正如所料,他会选择编辑器上方的“添加媒体”按钮,然后(a)上载新图像或(b)从媒体库中选择图像。这是我正在谈论的两个领域。

我需要的是将正确的代码放入我的函数中。php文件,以便可以单独设置以下一项或两项:

(a) 能够指定自定义帖子类型,并定义要与上载到媒体库的任何文件关联的隐藏类别名称。

(b) 能够指定自定义帖子类型,并定义在显示可供用户选择的文件时要使用的“受限类别”。

如何正确实现这一点?

与媒体元素类别分配相关的问题:Can I add a Category Metabox to attachment?

与媒体库相关的条件逻辑相关的问题:Conditional add_filter?

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

我想你可以试试过滤器list_terms_exclusions, 但我没有测试。

示例:

function fb_list_terms_exclusions($args) {

    if ( \'media-upload-popup\' != $where )
        return $where;

    if ( !current_user_can(\'manage_categories\') )
        $where = " AND t.slug  NOT IN (\'uncategorized\', \'category-2\')"; // slug of categories

    return $where;
}
add_filter( \'list_terms_exclusions\', \'fb_list_terms_exclusions\' );
更新此asnwer的评论:查找帖子类型的示例;首先是一个使用默认变量的小示例,然后是返回值的函数:

/**
 * Include my scripts
 *
 * $pagehook for check, if this the right page
 * $post_type for check, if this the right post type
 */
function fb_post_type_script($pagehook) {
    global $post_type;

    $pages = array( \'edit.php\', \'post.php\', \'post-new.php\' );
    if ( in_array( $pagehook, $pages ) && $post_type == \'my_post_type\' ) {
        wp_enqueue_script( \'my_script_example_key\', plugins_url( \'js/my_example_script.js\', __FILE__ ), array( \'jquery\', \'my_other_example_script_key\' ), \'1.0.0\' );
    }
}
add_action( \'admin_enqueue_scripts\', \'fb_post_type_script\' );
或者使用自定义函数查找帖子类型:

/**
 * Return post type
 *
 * @return string $post_type
 */
private function get_post_type() {

    if ( !function_exists(\'get_post_type_object\') )
        return NULL;

    if ( isset($_GET[\'post\']) )
        $post_id = (int) $_GET[\'post\'];
    elseif ( isset($_POST[\'post_ID\']) )
        $post_id = (int) $_POST[\'post_ID\'];
    else
        $post_id = 0;

    $post = NULL;
    $post_type_object = NULL;
    $post_type = NULL;
    if ( $post_id ) {
        $post = get_post($post_id);
        if ( $post ) {
        $post_type_object = get_post_type_object($post->post_type);
            if ( $post_type_object ) {
                $post_type = $post->post_type;
                $current_screen->post_type = $post->post_type;
                $current_screen->id = $current_screen->post_type;
            }
        }
    } elseif ( isset($_POST[\'post_type\']) ) {
        $post_type_object = get_post_type_object($_POST[\'post_type\']);
        if ( $post_type_object ) {
            $post_type = $post_type_object->name;
            $current_screen->post_type = $post_type;
            $current_screen->id = $current_screen->post_type;
        }
    } elseif ( isset($_SERVER[\'QUERY_STRING\']) ) {
        $post_type = esc_attr( $_SERVER[\'QUERY_STRING\'] );
        $post_type = str_replace( \'post_type=\', \'\', $post_type );
    }

    return $post_type;
}

public function example() {
    $post_type = $this->get_post_type();  

    // FB_POST_TYPE_1 is defined with my post type
    if ( FB_POST_TYPE_1 == $post_type ) {
        // tue etwas, wenn wahr
    }
}

结束

相关推荐

User-based media gallery

我正在建立一个同时使用WordPress和BuddyPress的网站,我希望建立一个自定义部分,用户可以上传作品,人们可以对其进行评论/评分。我浏览了各种不同的选项,但似乎使用自定义的帖子类型,然后允许成员提交内容是最好的选择。这是更好的方法吗?还是你认为帖子类型是最好的选择。要了解其所需的功能类型,请执行以下操作:http://dribbble.com/其想法是将图像作为类似域的URL。com/designs/my-awesome-work-2201/当查看成员档案时,您将能够查看他们的最新作品等,因此