Как я могу получить ссылку Wordpress «Preview», чтобы открыть в том же окне? - PullRequest
5 голосов
/ 05 декабря 2011

Я спросил Как сделать так, чтобы кнопка «Просмотр записи» сохранялась и просматривалась в одном и том же окне? на Wordpress Stack Exchange, но этот вопрос может быть лучше для переполнения стека, так как он более прямойсвязанные с кодированием.

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

Picture.png http://img854.imageshack.us/img854/7986/picturek.png

«Предварительный просмотр»Кнопка на самом деле является ссылкой, стилизованной под кнопку:

<a tabindex="4" id="post-preview" target="wp-preview"
href="/?p=67&amp;preview=true" class="preview button">Preview</a>

Моя проблема в том, что я не могу понять, как открыть эту ссылку в текущем окне.Обратите внимание на 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(){ ?>
    <script type="text/javascript">
    jQuery(function($){
     (above js code here)
    });
    </script>


    <?php
}

Это результат, который я получаю в итоге,Если я нажму ссылку «тест», она откроется в том же окне.Если я нажму на ссылку «Просмотр», она все равно откроется на новой вкладке.

Picture.png http://img832.imageshack.us/img832/4163/picturesf.png

ps: я использую метод из Вещи, о которых вы, возможно, не знаетеjQuery для проверки связанных событий, и я не нашел ничего связанного, и я считаю, что Wordpress в основном использует jQuery, поэтому я не думаю, что это будет связано с другим обработчиком событий.

Ответы [ 2 ]

3 голосов
/ 05 декабря 2011

Вы можете попробовать это:

jQuery('.preview.button').click(function(e){
    window.location.href = this.href;
    return false;
});

Работает с Chrome Inspector.

1 голос
/ 05 декабря 2011

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

Если вы включите и вторую часть, которая ждет 500 мс после загрузки страницы для запуска, кажется, что она работает как положено.

add_action('admin_footer','preview_same_window');

function preview_same_window(){ ?>
    <script type="text/javascript">

    jQuery(function($){

      //first part
      jQuery('.preview.button').unbind().removeAttr('target');

      //second part
      setTimeout(function(){
       jQuery('.preview.button').unbind().removeAttr('target');
      },500);


    });

    </script>
    <?php
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...