Der Artikeleditor in WordPress ist sicher ein zentrales Element. Täglich werden hunderte, ja tausende von Artikeln in dem kleinen Schreibfenster verfasst und veröffentlicht. Aber gerade bei etwas längeren Texten hat der Editor ein Manko, dass man relativ einfach beseitigen kann.
Schreibt man einen längeren Text und speichert zwischendrin mal (sicher ist bekanntlich sicher), dann “merkt” WordPress sich die Position nicht und scrollt automatisch an den Anfang. Nun muss man wieder einigermaßen mühsam an die Stelle scrollen, an der man sich vor dem Speichern befand. Das ist lästig und kann mit folgendem Codeschnipsel (mal wieder ab damit in die functions.php) vermieden werden.
/**
* The class will help you to recover the old scoll position in your Editor.
* Either HTML- or visual editor.
*/
final class Preserve_Editor_Scroll_Position {
/**
* Init
*/
public static function init() {
add_filter( ‘redirect_post_location’, array( __CLASS__, ‘add_query_arg’ ) );
add_action( ‘edit_form_advanced’, array( __CLASS__, ‘add_input_field’ ) );
add_action( ‘edit_page_form’, array( __CLASS__, ‘add_input_field’ ) );
add_filter( ‘tiny_mce_before_init’, array( __CLASS__, ‘extend_tiny_mce’ ) );
}
/**
* Adds a hidden input field for scrolltop value
*/
public static function add_input_field() {
$position = ! empty( $_GET[‘scrollto’] ) ? $_GET[‘scrollto’] : 0;
printf( ‘<input type="hidden" id="scrollto" name="scrollto" value="%d"/>’, esc_attr( $position ) );
// Print Javascript data
add_action( ‘admin_print_footer_scripts’, array( __CLASS__, ‘print_js’ ), 55 ); // Print after Editor JS.
}
/**
* Extend TinyMCE config with a setup function
*/
public static function extend_tiny_mce( $init ) {
if ( ‘tinymce’ == wp_default_editor() )
$init[‘setup’] = ‘rich_scroll’;
return $init;
}
/**
* Returns redirect url with query arg for scroll position
*/
public static function add_query_arg( $location ) {
if ( ! empty( $_POST[‘scrollto’] ) )
$location = add_query_arg( ‘scrollto’, (int) $_POST[‘scrollto’], $location );
return $location;
}
/**
* Prints Javascript data
*/
public static function print_js() {
?>
<script>
( function( $ ) {
$( ‘#post’ ).submit( function() {
scrollto =
$( ‘#content’ ).is( ‘:hidden’ ) ?
$( ‘#content_ifr’ ).contents().find( ‘body’ ).scrollTop() :
$( ‘#content’ ).scrollTop();
$( ‘#scrollto’ ).val( scrollto );
} );
$( ‘#content’ ).scrollTop( $( ‘#scrollto’ ).val() );
} )( jQuery );
function rich_scroll( ed ) {
ed.onInit.add( function() {
jQuery( ‘#content_ifr’ ).contents().find( ‘body’ ).scrollTop( jQuery( ‘#scrollto’ ).val() );
} );
};
</script>
<?php
}
}
add_action( ‘plugins_loaded’, array( ‘Preserve_Editor_Scroll_Position’, ‘init’ ) );
Soll ich noch mal erwähnen, dass man den Code natürlich auch in ein Plugin auslagern kann und vermutlich sogar sollte…?
Quelle: Dominik Schilling auf WP Engineer
Bildquelle: Peter Smola / pixelio.de

/* Plugin Name: Name Of The Plugin */Besser ist es aber, man macht mehr Angaben damit man im Backend auch nach 3 Wochen noch weiß was das für ein Plugin ist:/* Plugin Name: Name Of The Plugin Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates Description: A brief description of the Plugin. Version: The Plugin's Version Number, e.g.: 1.0 Author: Name Of The Plugin Author Author URI: http://URI_Of_The_Plugin_Author License: A "Slug" license name e.g. GPL2 */Mit diesen Zeilen kannst du quasi aus jeden Code ein Plugin machen. Oder du wartest halt doch bis zum 24. ;)