Как мне сразу перейти к "Редактировать дополнительные сведения" при нажатии на элемент в библиотеке мультимедиа?


По умолчанию, когда я нажимаю на элемент в библиотеке мультимедиа, он выводит меня на страницу Сведений о вложении, например .../wp-admin/upload.php?item=65.

Что мне нужно отредактировать, чтобы вместо этого перейти прямо на страницу "Редактировать дополнительные сведения"? Например,. .../wp-admin/post.php?post=65&action=edit

Я предполагал, что это будет так же просто, как изменить направление, на которое указывает href, - но, похоже, там нет href! Я предполагаю, что ссылка генерируется другим способом?

Author: SinisterBeard, 2014-11-20

3 answers

Из /wp-includes/script-loader.php:

$scripts->add( 'media-grid', "/wp-includes/js/media-grid$suffix.js", array( 'media-editor' ), false, 1 );

Из wp-admin/upload.php:

wp_enqueue_script( 'media-grid' );
wp_enqueue_script( 'media' );
wp_localize_script( 'media-grid', '_wpMediaGridSettings', array(
    'adminUrl' => parse_url( self_admin_url(), PHP_URL_PATH ),
) );

Итак, мы можем попытаться отменить регистрацию исходного файла media-grid.js и загрузить нашу собственную версию. Это можно сделать с помощью плагина:

<?php
/**
 * Plugin Name: Change Media Grid link
 * Plugin URI: http://wordpress.stackexchange.com/q/168981/17305
 */

add_action( 'admin_enqueue_scripts', 'loadmyscriptinstead_168981' );

function loadmyscriptinstead_168981 (){
    wp_deregister_script( 'media-grid' );

    wp_register_script( 'media-grid', plugin_dir_url( __FILE__ ) . 'media-grid.js', array( 'media-editor' ), false, 1 );

    wp_localize_script( 'media-grid', '_wpMediaGridSettings', array(
            'adminUrl' => parse_url( self_admin_url(), PHP_URL_PATH ),
        ) );

}

Теперь плагин загрузит измененную версию файла media-grid.js, найденного в папке плагина.

Отказ от ответственности: У меня нет опыта работы с позвоночником, поэтому следующее - просто PoC.

Это выполняет работу, но загружает модальный режим перед переходом на страницу редактирования. Кто-то обладая базовыми навыками, вы можете найти более чистое решение.

Изменить строку 490 с:

// Update browser url when navigating media details
if ( this.model ) {
    this.gridRouter.navigate( this.gridRouter.baseUrl( '?item=' + this.model.id ) );
}

Кому:

// Update browser url when navigating media details
if ( this.model ) {
    this.gridRouter.navigate( this.gridRouter.baseUrl( '?item=' + this.model.id ) );

    var currentLocation = location.href;
    //replace upload.php by post.php
    var newRoute = currentLocation.replace('upload.php', 'post.php');
    //replace item ?item= by ?post=
    newRoute = newRoute.replace('?item=', '?post=');
    newRoute += '&action=edit';

    window.location = newRoute;
}
 2
Author: RRikesh, 2014-11-28 08:16:15

Вы бы изменили серверную часть wordpress, эти изменения будут потеряны при обновлении.

Я предлагаю вам вместо этого нажать эту кнопку: http://i.imgur.com/5Ce3MzH.png (Под рукой была только датская установка, но она должна выглядеть так же)

Это дает вам подробное представление, и все ссылки в этом представлении ведут на страницу "Дополнительные сведения".

Надеюсь, это может помочь!

 0
Author: Jeppe, 2014-11-24 17:21:11

Ссылка, которую вы хотите изменить, создается с помощью Javascript в файле /wp-includes/js/media-grid.js (обычно загружается уменьшенная версия: /wp-includes/js/media-grid.min.js). В строке 314 (в Wordpress 4.0.1):

313:    routes: {
314:        'upload.php?item=:slug':    'showItem',
315:        'upload.php?search=:query': 'search'
316:    },

Вы можете попробовать изменить это следующим образом:

313:    routes: {
314:        'post.php?action=edit&post=:slug':    'showItem',
315:        'upload.php?search=:query': 'search'
316:    },

Хотя я сам этого не пробовал. @Jeppe прав в том, что это изменение проблематично, так как обновления перезапишут любые изменения, внесенные в файлы .js.

 0
Author: JHoffmann, 2014-11-25 22:18:40