Я спросил Как сделать так, чтобы кнопка "Preview Post" сохранялась и просматривалась в одном окне? на Wordpress Stack Exchange, но, возможно, этот вопрос лучше задать на Stack Overflow, поскольку он имеет более прямое отношение к кодированию.
В Wordpress есть окно, которое позволяет сохранить, просмотреть и опубликовать запись в блоге:
Кнопка "Preview" на самом деле является ссылкой, стилизованной под кнопку:
Preview
Моя проблема в том, что я не могу понять, как заставить эту ссылку открываться в текущем окне. Обратите внимание на часть target="wp-preview"
. Я пытаюсь избавиться от этой части, но думаю, что к этому элементу может быть привязана другая функция, потому что я действительно не могу заставить ее открываться в текущей вкладке / окне, даже после отвязки и удаления атрибута target
.
Я запускаю следующий код как часть плагина (вы можете увидеть больше информации о том, как запустить это как плагин ниже), но также можно скопировать и вставить это в консоль Chrome или Firefox, чтобы проверить это самостоятельно, даже не изменяя Wordpress. Обратите внимание, что при тестировании вам нужно будет использовать jQuery
вместо $
в собственных функциях, так как Wordpress использует метод noconflict
, однако приведенный ниже код прекрасно работает как есть.
//select the node and cache the selection into a variable
var $node = jQuery('a.preview');
//add a 1px dotted outline to show we have the right element
$node.css('outline','1px dotted red');
//show current target
console.log($node.prop('target'));
//show if anything is bound - nothing is for me ('undefined')
console.log($node.data('events'));
//remove anything bound to it
$node.unbind();
//set target to _self (current window), just in case
$node.prop('target','_self');
//the remove the target attribute all together
$node.removeAttr('target');
//clone the node
var $clone = $node.clone();
//change the text to new
$clone.text('new');
//remove target from clone
$clone.removeAttr('target');
//unbind the clone
$clone.unbind();
//insert the clone after the original node
$node.after($clone);
//show current target - now shows undefined for me
console.log($node.prop('target'));
//show if anything is bound - still 'undefined'
console.log($node.data('events'));
Вот как можно использовать этот код в теме или плагине:
// set up an action to set a function to run in the wp admin_footer
add_action('admin_footer','my_admin_footer_script',9999);
Вот функция, которая добавляет javascript:
//this function can then be used to add javascript code to the footer
function my_admin_footer_script(){ ?>
Вот результат, который я получаю. Если я нажму на ссылку "Тест", она откроется в том же окне. Если я нажму на ссылку "Предварительный просмотр", она откроется в новой вкладке.
ps: Я использую метод из Things you may not know about jQuery для проверки связанных событий, и я не нашел ничего связанного, и я считаю, что Wordpress в основном использует jQuery, поэтому я не думаю, что это может быть связано с другим обработчиком событий.