Как заставить ссылку Wordpress 'Preview' открываться в том же окне?

Я спросил Как сделать так, чтобы кнопка "Preview Post" сохранялась и просматривалась в одном окне? на Wordpress Stack Exchange, но, возможно, этот вопрос лучше задать на Stack Overflow, поскольку он имеет более прямое отношение к кодированию.

В Wordpress есть окно, которое позволяет сохранить, просмотреть и опубликовать запись в блоге:

Picture.png

Кнопка "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(){ ?>
    


    

Вот результат, который я получаю. Если я нажму на ссылку "Тест", она откроется в том же окне. Если я нажму на ссылку "Предварительный просмотр", она откроется в новой вкладке.

Picture.png

ps: Я использую метод из Things you may not know about jQuery для проверки связанных событий, и я не нашел ничего связанного, и я считаю, что Wordpress в основном использует jQuery, поэтому я не думаю, что это может быть связано с другим обработчиком событий.

5
задан Glorfindel 15 August 2019 в 01:09
поделиться