Startseite und Artikelseite immer oben anzeigen

WordPress ist nicht mehr nur ein Blogsystem und auch die typischen Landingpages oder One-Pager sind es nicht immer, die mit WordPress umgesetzt werden. Manchmal sind es komplexe Websites mit vielen Seiten und dann kann es mitunter ganz schön nervig sein, wenn die Startseite oder die Artikelseite gesucht wird. Insbesondere bei der Startseite, die ja auf die Domain verkürzt wird, muss einem dann einfallen, wie sie genannt wurde oder was der Inhalt ist, damit danach gesucht werden kann …

Wie es häufig so ist, gibt es dazu schon ein Ticket, aber noch keine Entscheidung für eine Lösung. Da die im Ticket diskutierten Lösungen alle irgendein Problem hatten (zum Beispiel Probleme mit der Zählung) habe ich eine Lösung, die ich auf Stackexchange gefunden habe, mal in ein Plugin gegossen. Hier der Code:

<?php
/**
 * Plugin Name: Page List Optimizer
 * Description: Push Front Page & Posts Page & Privacy Page to top of admin list
 * Plugin URI:  https://torstenlandsiedel.de
 * Version:     1.0
 * Author:      Torsten Landsiedel
 * Author URI:  http://torstenlandsiedel.de
 * Licence:     GPL 2
 * License URI: http://opensource.org/licenses/GPL-2.0
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

/**
 * Push Front Page & Posts Page & Privacy Page to top of admin list
 *
 * @see https://wordpress.stackexchange.com/questions/188406/wordpress-home-front-page-display-at-top-of-admin-pages-list/279836#279836
 */
function ezific_admin_static_pages_first( $orderby, $query ) {

	// Leave if not Admin edit Pages query.
	if ( ! ( is_admin() && $query->is_main_query() && 'page' === $query->get( 'post_type' ) ) ) {
		return $orderby;
	}

	// Leave if neither static pages are set.
	$front   = (int) get_option( 'page_on_front' );
	$posts   = (int) get_option( 'page_for_posts' );
	$privacy = (int) get_option( 'wp_page_for_privacy_policy' );
	
	$ids = implode( ',', array_filter( array( $privacy, $posts, $front ) ) );
	if ( empty( $ids ) ) {
		return $orderby;
	}

	// Update the query.
	global $wpdb;
	$orderby = 'FIELD(' . $wpdb->posts . '.ID,' . $ids . ') DESC, ' . $orderby;
	return $orderby;
}

add_filter( 'posts_orderby', 'ezific_admin_static_pages_first', 10, 2 );

Der sehr mächtige posts_orderby-Filter wird hier genutzt, um dem orderby SQL-Statement noch eine SQL-Abfrage der zwei IDs voranzustellen. Die Funktion wird vorher verlassen, wenn wir nicht auf der Admin-Seite mit den Seiten sind oder wenn die Startseite und Artikelseite nicht gesetzt sind.

Bei meinen Tests habe ich keine Probleme mit dieser Lösung festgestellt. Ich könnte mir nur vorstellen, dass es Probleme geben kann, wenn anderer Code (Plugins) diesen Filter benutzen.

Gegebenenfalls muss dann noch die Priorität von 10 auf einen größeren oder kleineren Wert gesetzt werden, um die Reihenfolge der Filter anzupassen.

Dir ist ein Problem mit dieser Lösung aufgefallen? Oder Du hast eine bessere Lösung? Dann ab damit in die Kommentare. Ich lerne gerne dazu und bin zudem nicht der Erfinder dieser Lösung, also lass uns den besten Weg diskutieren. Bonuspunkte gibt es für einen Patch am Ticket 😉

2 Antworten auf Startseite und Artikelseite immer oben anzeigen

  1. Hallo Torsten,

    kannst Du das Plugin noch um die Seite für die Datenschutzerklärung erweitern?

    Liebe Grüße
    Frank

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.