netconstructorcom
  • 0
Мастер

Как мне изменить лайтбокс quotInsert Mediaquot в админке, чтобы отображались только элементы мультимедиа из категории?

  • 0

Я пытаюсь решить проблему с медиатекой.

По сути, то, что я хочу сделать, это «автоматически» назначать медиафайлы, которые загружаются со страницы «редактировать сообщение» пользовательского типа сообщения, в предопределенную категорию.

Основываясь на других ответах на этом сайте, я нашел, что разные люди обсуждают решение (одна из этих ссылок ниже), которое позволяет вам «вручную» назначать категорию элементам медиатеки. Моя цель, однако, состоит в том, чтобы каким-то образом определить конкретные типы сообщений и соответствующую категорию, которая должна применяться.

В то же время я также хотел бы иметь возможность ограничивать «конкретный тип сообщения», поэтому, когда лайтбокс медиатеки запрашивается со страницы редактирования сообщения, «медиабиблиотека» показывает ТОЛЬКО элементы в категориях, которые я определяю.

Я знаю, что это может показаться немного запутанным, поэтому позвольте мне привести краткий пример.

Допустим, у меня есть пользовательский тип сообщений под названием «новости сотрудников». Теперь предположим, что кто-то продолжает добавлять/редактировать запись в этом пользовательском типе записи. Далее предположим, что теперь он использует редактор для добавления контента и теперь хочет добавить одно или несколько изображений. Как и ожидалось, он выберет кнопку «добавить медиа» над редактором и либо (а) загрузит новое изображение, либо (б) выберет изображение из медиатеки. ЭТО две области, о которых я говорю.

Что мне нужно, так это правильный код, который нужно поместить в мой файл functions.php, чтобы одно или оба из следующих действий можно было установить по отдельности:

(a) Возможность указать пользовательский тип записи и определить имя скрытой категории, которое будет связано с любым файлом, загруженным в медиатеку.

(b) Возможность указать пользовательский тип записи и определить «категории с ограниченным доступом», которые будут использоваться при представлении файлов, доступных для выбора пользователем.

Как этого добиться правильно?

Связанный вопрос, связанный с присвоением категории медиа-элементам: Могу ли я добавить метабокс категории к вложению?

Связанный вопрос, связанный с условной логикой, связанной с медиатекой: Условный add_filter?

Share
  1. Вы можете запустить pre_get_posts или parse_query отфильтровать окно загрузки так же, как и для любой страницы администратора (я думаю), просто проверьте $pagenow внутри обратного вызова и убедитесь, что он… и media-upload.php переустановите соответствующие переменные запроса по мере необходимости.

    • 0
  2. Я думаю, что вы можете пойти о фильтре 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' );
    

    обновление для комментариев к этому ответу: пример поиска типов сообщений; сначала небольшой пример использования переменных по умолчанию, а затем функция возврата значения:

    /**
     * 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
        }
    }
    
    • 0

Оставить ответ

You must login to add an answer.