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

WordPress Nutzerrollen und ihre Rechte

Grundsätzlich hat eine übergeordnete Nutzerrolle immer die Rechte einer untergeordneten. Der Super Admin existiert nur in einem Multisite-Netzwerk. Entsprechend sind die Rechte eines Administrators hier eingeschränkter.

  • Ein Super Admin verwaltet ein Multisite-Netzwerk.
  • Ein Administrator verwaltet eine Website.
  • Ein Redakteur kann alle Beiträge, Seiten, Kommentare und Kategorien veröffentlichen, bearbeiten und löschen.
  • Ein Autor kann Dateien hochladen, eigene Beiträge veröffentlichen und bearbeiten.
  • Ein Mitarbeiter kann Beiträge erstellen, aber nicht veröffentlichen.
  • Ein Abonnent kann das eigene Nutzerprofil bearbeiten und registriert kommentieren.
Nutzerrechte (1)Super AdminAdmini-stratorRedakteurAutorMitarbeiterAbonnent
MU (2) verwaltenJa
Seiten in MU hinzufügen, bearbeiten, löschenJa
Nutzer in MU hinzufügen, bearbeiten, löschenJa
Themes in MU freischalten, (de)installieren, bearbeitenJa
MU-Einstellungen bearbeitenJa
HTML und Javascript in Seiten, Beiträgen und Kommentaren ausführenJa
Nutzer erstellenJaJa (3)
Nutzer einer Website erstellen, bearbeiten, entfernenJaJa (3)
Plugins aktivieren, löschenJaJa (4)
Plugins installieren, bearbeitenJaJa (3)
WordPress, Themes & Plugins aktualisierenJaJa (4)
Einstellungen (einer Website) bearbeitenJaJa
Themes installieren, löschen, Dateien bearbeitenJaJa (4)
Theme-Einstellungen bearbeitenJaJa
Theme wechselnJaJa
Import/Export-Tool nutzenJaJa
Kommentare moderierenJaJaJa
Kategorien hinzufügen, bearbeiten, löschenJaJaJa
Beiträge/Seiten veröffentlichen, bearbeiten, löschenJaJaJa
private Beiträge/Seiten lesen, bearbeiten, löschenJaJaJa
Dateien hochladenJaJaJaJa
"Meine Seiten"-Menü nutzenJaJaJaJa
eigene Beiträge veröffentlichenJaJaJaJa
eigene Beiträge bearbeiten, löschenJaJaJaJaJa
eigenes Nutzerprofil bearbeitenJaJaJaJaJaJa
Nutzerrechte (1)Super AdminAdmini-stratorRedakteurAutorMitarbeiterAbonnent

RSS-Feeds deaktivieren und aus wp_head entfernen

Plugin

// Feeds deaktivieren und Fehlermeldung ausgeben
 function disable_feed() {
 wp_die( __('Für diese Website ist kein Feed verf&uuml;gbar. <a href="'. get_bloginfo('url') .'">Zur Startseite</a>.') );
 }
 add_action('do_feed', 'disable_feed', 1);
 add_action('do_feed_rdf', 'disable_feed', 1);
 add_action('do_feed_rss', 'disable_feed', 1);
 add_action('do_feed_rss2', 'disable_feed', 1);
 add_action('do_feed_atom', 'disable_feed', 1);
// Feeds aus wp_head entfernen
 remove_action( 'wp_head', 'feed_links_extra', 3 );
 remove_action( 'wp_head', 'feed_links', 2 );

Letzte Bearbeitungen Admin Dashboard Widget

Plugin

add_action( 'wp_dashboard_setup', 'dashboard_last_edits_register_dashboard_widget' );
 function dashboard_last_edits_register_dashboard_widget()
 {
 wp_add_dashboard_widget(
 __FUNCTION__, 'K&uuml;rzlich bearbeitete Inhalte', 'dashboard_last_edits_render_dashboard_widget');
 }
function dashboard_last_edits_render_dashboard_widget() { 
 $posts = get_posts(
 array ('numberposts' => 10, 'post_type' => array ( 'post', 'page' ), 'orderby' => 'modified')
 );
 if ( ! $posts )
 {
 print 'Keine Bearbeitungen gefunden. <a href="'
 . admin_url( 'post-new.php' ) . '">Einen Beitrag schreiben.</a>';
 }
 else
 {
 echo '<ul>';
 foreach ( $posts as $post )
 { printf('<li>&raquo; <a href="%1$s">%2$s</a></li>', esc_html( get_permalink( $post->ID )),
 esc_html( $post->post_title )); }
 echo '</ul>';
 }
}

Zentrale Funktionen für Sicherheit und Nutzerfreundlichkeit im WPMU-Netzwerk

Zentrale Datei mit Funktionen, die im kompletten MU-Netzwerk ausgeführt werden.

/wp-content/mu-plugins/general-security-usability.php

<?php
/*
Plugin Name: General Security &amp; Usability
Plugin URI: https://wpdoc.de/?p=81
Description: Grundlegende Einstellungen hinsichtlich Sicherheit, Nutzerfreundlichkeit und Datenschutz.
Author: Johannes Ries
Author URI: http://johannesries.de
Version: 2.1
*/

// NOBLOGREDIRECT Workaround
remove_action( 'template_redirect', 'maybe_redirect_404' );

// Kommentare ohne IP-Adresse und Cookies speichern
add_filter( 'pre_comment_user_ip', '' );
  remove_action( 'set_comment_cookies', 'wp_set_comment_cookies' );// Login-Fehlermeldung bearbeiten
  function failed_login() {
  return 'Die eingegebenen Daten sind fehlerhaft. ';
}
add_filter('login_errors', 'failed_login');

// Dashboard umbennen in Übersicht
add_filter(
'gettext', 'change_names' );
add_filter( 'ngettext', 'change_names' );
function change_names( $translated ) { $translated = str_ireplace(
'Dashboard', '&amp;Uuml;bersicht', $translated );
return $translated;}

// Bilder grundsätzlich mit Datei (nicht Anhangseite) verlinken
update_option('image_default_link_type','file');

// Leere Absätze entfernen
add_filter('the_content', 'remove_empty_p', 20, 1);
function remove_empty_p($content) {
  $content = force_balance_tags($content);
  return preg_replace('#<p>(s|&nbsp;)*+(<brs*/*>)?(s|&nbsp;)*</p>#', '', $content);
}

// Änderungsmöglichkeit für das Farbschema des Administrationsbereich entfernen
function admin_color_scheme() {
  global $_wp_admin_css_colors;
  $_wp_admin_css_colors = 0;
}
add_action('admin_head', 'admin_color_scheme');

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

Beiträge im Archiv in zwei Spalten ausgeben

archive.php

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php $postcount++; ?>
<div <?php post_class() ?>>
<h3 id="post-<?php the_ID(); ?>"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
<div class="entry">
<?php the_excerpt() ?>
</div>
</div>
<?php if ($postcount % 2 == 0) { ?><p class="clear"></p><?php } ?>
<?php endwhile; else : endif; ?>

style.css

.clear { clear:both; margin:0; padding:0; }
.archive .post { float:left; width:40%; margin:0 10px 10px 0; }

Artikelbild mit Zufalls-Bild als Fallback

  • start.php mit benutzerdefinierter Startseite auf der eine eigene Version des Artikelbilds (homepage-thumbnail) ausgegeben werden soll
  • single.php mit entsprechendem Artikelbild
  • ein Ordner /images/artikelbild/start/ im Theme-Ordner, in dem Bilder 1.jpg, 2.jpg und 3.jpg in den passenden Dimensionen des homepage-thumbnail abgelegt sind
  • ein Ordner /images/artikelbild/single/ im Theme-Ordner, in dem Bilder 1.jpg, 2.jpg und 3.jpg in den passenden Dimensionen des post-thumbnail abgelegt sind
  • hat ein Artikel kein Artikelbild, wird automatisch mittels Zufallsfunktion eines der Bilder aus den Ordnern angezeigt

functions.php

add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 600, 200, true );
add_image_size( 'homepage-thumbnail', 290, 120, true );

start.php

<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" >
<?php if ( has_post_thumbnail() )
{ the_post_thumbnail( 'homepage-thumbnail', array('class' => 'homepage-thumbnail') ); }
else { ?>
<img src="<?php bloginfo('template_directory'); ?>/images/artikelbild/start/<?php echo mt_rand(1, 3); ?>.jpg" alt="<?php the_title(); ?>" class="homepage-thumbnail" />
<?php } ?></a>

single.php

<?php if ( has_post_thumbnail() )
{ the_post_thumbnail( 'post-thumbnail', array('class' => 'single-thumbnail') ); }
else { ?>
<img src="<?php bloginfo('template_directory'); ?>/images/artikelbild/single/<?php echo mt_rand(1, 5); ?>.jpg" alt="<?php the_title(); ?>" class="single-thumbnail" /><?php } ?>

Anpassen