Comment puis-je modifier la visionneuse « Insérer des médias » dans l'admin pour afficher uniquement les éléments multimédias d'une catégorie?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/9763

Question

Je tente de résoudre un problème que je continue à avoir avec la bibliothèque multimédia.

Pour l'essentiel, ce que je cherche à faire est « automatiquement » Assigner des médias qui est téléchargé à partir d'une page type de message personnalisé « modifier post » à une catégorie prédéfinie.

Sur la base d'autres réponses sur ce site je l'ai trouvé diverses personnes solution à discuter (un de ces liens est ci-dessous) qui vous permettent d'assigner « manuellement » une catégorie à des éléments de bibliothèque de médias. Mon objectif est cependant de définir en quelque sorte les types de postes spécifiques et la catégorie associer qui devrait être appliquée.

En même temps, je voudrais aussi la possibilité de restreindre un « type de poste spécifique » alors quand la bibliothèque média lightbox est demandé à la page post-édition que la « médiathèque » affiche uniquement les articles dans les catégories je définis.

Je sais que cela peut sembler un peu confus, alors laissez-moi donner un exemple rapide.

Le mot Let je un type de poste personnalisé appelé « nouvelles des employés ». Maintenant, nous allons dire que quelqu'un produit à ajouter / modifier un poste au sein de ce type de poste personnalisé. Supposons encore qu'il utilise maintenant l'éditeur d'ajouter du contenu et que vous souhaitez maintenant ajouter une / plusieurs images. Comme prévu, il choisirait le bouton « ajouter du contenu multimédia » au-dessus de l'éditeur et (a) télécharger une nouvelle image ou (b) sélectionner une image dans la bibliothèque multimédia. Ce sont les deux domaines dont je parle.

Ce que je dois est le code correct pour mettre dans mon fichier functions.php de sorte que l'un ou les deux éléments suivants peuvent être réglés individuellement:

(a) Possibilité de spécifier un type de poste personnalisé et définir le nom de la catégorie cachée à associer à un fichier transféré dans la bibliothèque multimédia.

(b) Possibilité de spécifier un type de poste personnalisé et définir les « catégories restreintes » à utiliser lors de la présentation des fichiers disponibles pour l'utilisateur à sélectionner.

Comment cela peut-il être réalisé correctement?

Question connexe liée à l'affectation de la catégorie des éléments multimédias: Puis-je ajouter une catégorie Metabox à l'attachement?

Question connexe liée à la logique conditionnelle liée à la bibliothèque de médias: conditionnelle add_filter?

Était-ce utile?

La solution

Je pense que vous pouvez aller sur le list_terms_exclusions filtre, mais je n `testé.

exemple:

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' );

mise à jour pour les commentaires à ce asnwer: un exemple pour trouver les types de poste; d'abord un petit exemple pour utiliser les variables par défaut et après un funtion pour le retour d'une valeur:

/**
 * 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' );

alternative que vous utilisez une fonction personnalisée pour trouver le type de message:

/**
 * 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
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top