TinyMCE-Editor ab WordPress 3.9: Buttons hinzufügen/entfernen, Formate bearbeiten

Ab WordPress 3.9 hat sich die Ansprache des Editors, der TinyMCE nutzt verändert. Über die functions.php, bevorzugt über ein Plugin, dass im Zweifelsfall einfach deaktiviert werden kann, können weiterhin Bearbeitungen des Editors vorgenommen werden. Im Codebeispiel sind bereits einige Deaktivierungen für Buttons auskommentiert, der Vollständigkeit halber aber aufgeführt.

Buttons entfernen

function delete_buttons($buttons) {
// unset($buttons[0]); // Fett
// unset($buttons[1]);  // Kursiv
// unset($buttons[2]); // Durchgestrichen
// unset($buttons[3]); // Aufzählungszeichen
// unset($buttons[4]); // Nummerierung
// unset($buttons[5]); // Zitat
unset($buttons[6]);  // Horizontale Linie
unset($buttons[7]); // Text links ausrichten
unset($buttons[8]);  // Text zentrieren
unset($buttons[9]);  // Text rechts ausrichten
// unset($buttons[10]); // Link hinzufügen
// unset($buttons[11]); // Link entfernen
unset($buttons[12]); // Weiterlesen-Tag
unset($buttons[14]); // Vollbild-Ansicht
return $buttons;
}
add_filter('mce_buttons', 'delete_buttons');

function delete_buttons_2($buttons) {
// unset($buttons[0]); // Absatzformatierung Auswahl
unset($buttons[1]);  // Unterstreichen
unset($buttons[2]); // Blocksatz
unset($buttons[3]); // Textfarbe
// unset($buttons[4]); // Als Text einfügen
// unset($buttons[5]); // Formatierung löschen
// unset($buttons[6]);  // Sonderzeichen
unset($buttons[7]); // Einzug verringern
unset($buttons[8]);  // Einzug erhöhen
// unset($buttons[9]);  // Schritt widerrufen
// unset($buttons[10]); // Schritt wiederholen
unset($buttons[11]); // Hilfe
return $buttons;
}
add_filter('mce_buttons_2', 'delete_buttons_2');

Absatzformatierung-Auswahl und Format-Auswahl bearbeiten

function mce_mod( $init ) {
$init['block_formats'] = 'Paragraph=p;Heading 3=h3;Heading 4=h4;Heading 5=h5;Blockquote=blockquote';
$style_formats = array (
array( 'title' => 'Fett', 'inline' => 'b' ),
array( 'title' => 'Kursiv', 'inline' => 'em' ),
array( 'title' => 'Unterstrichen', 'inline' => 'span', 'styles' => array( 'text-decoration' => 'underline' ) ),
array( 'title' => 'Durchgestrichen', 'inline' => 'del' ),
array( 'title' => 'Hochgestellt', 'inline' => 'sup' ),
array( 'title' => 'Tiefgestellt', 'inline' => 'sub' )
);

$init['style_formats'] = json_encode( $style_formats );
$init['style_formats_merge'] = false;
return $init;
}
add_filter('tiny_mce_before_init', 'mce_mod');

function mce_add_buttons( $buttons ){
array_splice( $buttons, 1, 0, 'styleselect' );
return $buttons;
}
add_filter( 'mce_buttons_2', 'mce_add_buttons' );

Referenz

Kontaktangaben im Impressum für alle Websites zentral verwalten

Als mu-plugin realisiert wird das Impressum zentral für alle Websites einer Multisite-Umgebung nutzbar. Der Shortcode impressum integriert das Impressum. Mit der Variable impressum email=“name@tld.de“ kann die E-Mail-Adresse angepasst werden. Sinnvoll ist diese Lösung insbesondere dann, wenn über die Websites hinweg die gleichen Kontakdaten gelten. Sie kann z.B. um dann ebenfalls zentral verwaltete Datenschutzhinweise erweitert werden.

function shortcode_imprint($atts, $content = null) {
 // Die hier angegebene E-Mail-Adresse wird angezeigt, wenn die Variable email bei Eingabe des Shortcodes nicht gesetzt wird.
 extract(shortcode_atts(array( 'email' => '2013@wpdoc.de' ), $atts));
 $return = '<p>Max Mustermann<br />
 Musterstra&szlig;e 5<br />
 43524 Musterhausen<br />
 Telefon 4531 4564761<br />
 E-Mail ' . $email . '</p>';
 return $return;
 }
add_shortcode('impressum', 'shortcode_imprint');

Benutzerdefinierte Admin-Toolbar mit Abmelde-Link und Suche im Backend

Plugin zur Veränderung der Admin-Toolbar:

  • Das WordPress-Logo, das Profil-Menü und die reguläre Suchfunktion im Frontend werden entfernt
  • Eine Suchfunktion im Frontend und Backend, ein „Abmelden“-Link und ein „Profil bearbeiten“-Link unter „Meine Seiten“ werden hinzugefügt

<?php
/*
Plugin Name: Custom Adminbar
Plugin URI: https://wpdoc.de/?p=214
Description: Benutzerdefinierte Adminbar mit Abmelde-Link und Suche im Backend.
Author: Johannes Ries
Author URI: http://johannesries.de
Version: 1.0
*/

function custom_admin_bar() {
$form = '<form action="' .esc_url( admin_url('edit.php') ). '" method="get" id="adminbarsearch">';
$form .= '<input name="s" tabindex="1" type="text" value="" maxlength="54" />';
$form .= '<input type="submit" value="' .__('Search'). '"/>';
$form .= '</form>';

global $wp_admin_bar;
$wp_admin_bar->remove_menu('wp-logo');
$wp_admin_bar->remove_menu('my-account');
$wp_admin_bar->remove_menu('search');
$wp_admin_bar->add_menu( array(
'id'    => 'wp-custom-edit-profile',
'title' => 'Mein Profil bearbeiten',
'parent'=>'my-sites',
'href'  => self_admin_url('profile.php'),
'meta' => array('title' => 'Passwort, E-Mail-Adresse und weitere Details &auml;ndern')
));
$wp_admin_bar->add_node( array(
'parent' => 'top-secondary',
'id'    => 'custom-logout',
'title' => 'Abmelden',
'href'  => wp_logout_url(),
'meta' => array('title' => 'Abmelden')
) );
$wp_admin_bar->add_menu(
array(
'parent' => 'top-secondary',
'id' => 'custom-search',
'title' => $form,
'meta' => array('class' => 'admin-bar-search')
)
);
}

add_action(
'plugins_loaded',
function () {
if ( is_admin_bar_showing() ) {
add_action('wp_before_admin_bar_render','custom_admin_bar');
}
}
);
?>

Aktualisierungsbenachrichtigung nur für Nicht-Admins MU/Singlesite

Plugin oder via general-security-usability.php

// Aktualisierungshinweis nur für Admins in Singlesite-Umgebung bzw. nur für Superadmins in Multisite-Umgebung
add_action(
 'plugins_loaded',
 function () {
 if (( is_multisite() && !current_user_can('manage_network') ) || ( !is_multisite() && !current_user_can('create_users')))  {
 add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
 add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
 add_filter( 'pre_site_transient_update_core', create_function( '$a', "return null;" ) );
 }
 }
);

WordPress Daten, Zahlen, Fakten

Vorheriger und nächster Beitrag-Link mit Artikelbild und Zufallsbild als Fallback

single.php

<div id="prev_post">
 <?php
 $prev_post = get_previous_post('true');
 if (!empty( $prev_post )): ?>
 <a href="<?php echo get_permalink( $prev_post->ID ); ?>" title="<?php $prev_post->post_title; ?>" ><?php if ( has_post_thumbnail( $prev_post->ID ) ) { echo get_the_post_thumbnail($prev_post->ID, 'homepage-thumbnail'); } else { ?>
 <img src="<?php bloginfo('template_directory'); ?>/images/artikelbild/start/<?php echo mt_rand(1, 5); ?>.jpg" alt="<?php $prev_post->post_title; ?>" /><?php } ?></a>
 <p><a href="<?php echo get_permalink( $prev_post->ID ); ?>"><?php echo $prev_post->post_title; ?></a></p>
 <?php endif; ?>
</div>

<div id="next_post">
 <?php
 $next_post = get_next_post('true');
 if (!empty( $next_post )): ?>
 <a href="<?php echo get_permalink( $next_post->ID ); ?>" title="<?php $next_post->post_title; ?>" ><?php if ( has_post_thumbnail( $next_post->ID ) ) { echo get_the_post_thumbnail($next_post->ID, 'homepage-thumbnail'); } else { ?>
 <img src="<?php bloginfo('template_directory'); ?>/images/artikelbild/start/<?php echo mt_rand(1, 5); ?>.jpg" alt="<?php $next_post->post_title; ?>" /><?php } ?></a>
 <p><a href="<?php echo get_permalink( $next_post->ID ); ?>"><?php echo $next_post->post_title; ?></a></p>
 <?php endif; ?>
</div>

style.css

#next_post { width:290px; float:right; margin:20px 20px 20px 0; }
#prev_post { width:290px; float:left; margin:20px 0 20px 20px; }

Zweispaltige Artikelausgabe nach Kategorie mit WP_Query und sticky_posts

start.php (Benutzerdefiniertes Seitentemplate)

  • eine CSS-Klasse frontcoluml und eine frontcolumr, die die beiden Spalten formatiert
  • mit der PHP-Variable $postcount wird gezählt, wie viele Beiträge bereits ausgegeben wurden; mit $showposts wird dann die Zahl der noch auszugebenden weiteren Beiträge ermittelt
  • es wird in diesem Beispiel davon ausgegangen das pro Spalte drei Beiträge (post_per_page => 3) aus Kategorie fünf (cat => 5) ausgegeben werden sollen
<div class="frontcoluml">
<?php
$temp = $wp_query;
$wp_query = new WP_Query( array( 'posts_per_page' => '3', 'cat' => 5, 'post__in' => get_option('sticky_posts')));
while ($wp_query->have_posts()) : $wp_query->the_post();
?>
<h3><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
<div class="entry">
<?php the_excerpt(); ?>
</div>
<?php
$postcount++;
endwhile;
wp_reset_postdata();
$showposts = 3 - $postcount;
if ($showposts != 0) {
$temp = $wp_query;
global $more; $more = 0;
$wp_query = new WP_Query( array( 'posts_per_page' => $showposts, 'ignore_sticky_posts' => 1, 'post__not_in' => get_option('sticky_posts'), 'cat' => 5));
while ($wp_query->have_posts()) : $wp_query->the_post();
?>
<h3><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
<div class="entry">
<?php the_excerpt(); ?>
</div>
<?php endwhile;
wp_reset_postdata();
} else {}
unset($postcount);
unset($showposts);
?>
</div>

<div class="frontcolumr">
<?php
$temp = $wp_query;
$wp_query = new WP_Query( array( 'posts_per_page' => '3', 'cat' => 5, 'offset' => 3, 'post__in' => get_option('sticky_posts')));
while ($wp_query->have_posts()) : $wp_query->the_post();
?>
<h3><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
<div class="entry">
<?php the_excerpt(); ?>
</div>
<?php
$postcount++;
endwhile;
wp_reset_postdata();
$showposts = 3 - $postcount;
if ($showposts != 0) {
$temp = $wp_query;
global $more; $more = 0;
$wp_query = new WP_Query( array( 'posts_per_page' => $showposts, 'ignore_sticky_posts' => 1, 'post__not_in' => get_option('sticky_posts'), 'cat' => 5, 'offset' => 3,));
while ($wp_query->have_posts()) : $wp_query->the_post();
?>
<h3><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
<div class="entry">
<?php the_excerpt(); ?>
</div>
<?php endwhile;
wp_reset_postdata();
} else {}
unset($postcount);
unset($showposts);
?>
</div>

Referenz