Как мне сразу перейти к "Редактировать дополнительные сведения" при нажатии на элемент в библиотеке мультимедиа?
По умолчанию, когда я нажимаю на элемент в библиотеке мультимедиа, он выводит меня на страницу Сведений о вложении, например .../wp-admin/upload.php?item=65
.
Что мне нужно отредактировать, чтобы вместо этого перейти прямо на страницу "Редактировать дополнительные сведения"? Например,. .../wp-admin/post.php?post=65&action=edit
Я предполагал, что это будет так же просто, как изменить направление, на которое указывает href, - но, похоже, там нет href! Я предполагаю, что ссылка генерируется другим способом?
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;
}
Вы бы изменили серверную часть wordpress, эти изменения будут потеряны при обновлении.
Я предлагаю вам вместо этого нажать эту кнопку: http://i.imgur.com/5Ce3MzH.png (Под рукой была только датская установка, но она должна выглядеть так же)
Это дает вам подробное представление, и все ссылки в этом представлении ведут на страницу "Дополнительные сведения".
Надеюсь, это может помочь!
Ссылка, которую вы хотите изменить, создается с помощью 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.