• Gelöst wpapm

    (@wpapm)


    Hallo,

    in einer Funktion verwende ich

    if ( is_page( array( …

    Gibt es eine Möglichkeit die Abfrage nur auf einen Teil des Seitennamens oder des Slug zu begrenzen?

    Page enthält oder Slug enthält?

    Ich hatte damit bisher in der functions.php CSS nur auf bestimmten Seiten einfügen lassen. Jetzt hatte ich auf Multisite umgestellt und da gab es dann das Problem das Seiten-IDs in den Multiseiten identisch sein können und hab dann CSS an Stellen an welchen das nicht sein soll. Umgangen habe ich das nun mit der Seitenbezeichnung. Da dies in einem Fall aber mehrere Seiten mit Unterseiten betrifft würde ich den Eintrag in der functions.php lieber kurz halten. Alle diese Seiten enthalten einen fast identischen Titel und Slug.

    Wo könnte oder müsste ich nachlesen um zu einer Lösung zu finden?

Ansicht von 5 Antworten – 1 bis 5 (von insgesamt 5)
  • Moderator threadi

    (@threadi)

    Nein, das geht nicht mit dieser Funktion. Siehe auch Handbuch: https://developer.wordpress.org/reference/functions/is_page/

    Du müsstest das mit einer individuellen Abfrage über WP_Query machen, was letztlich auch is_page() im Hintergrund ausführt nur eben nicht mit „ähnlich“. Ist jedoch etwas komplex, wenn man das auf Titel oder Slug anwenden will. Ich denke du müsstest den „s“-Parameter auf den Slug-Teil setzen und dann die zu durchsuchenden Felder über „search_columns“ beschränken. Beispiel (ungetestet):

    $query = array(
    'post_type' => 'page',
    's' => 'dein-slug'
    'search_columns' => array( 'post_name' )
    );
    $result = new WP_Query( $query );

    Bitte beachte, dass das Forum hier eher für Anwenderfragen gedacht ist. Deine Frage geht stark in Richtung Programmierung. Dazu würdest du hier eher Antworten erhalten: https://wordpress.stackexchange.com/

    Thread-Starter wpapm

    (@wpapm)

    @threadi

    Danke für deinen Hinweis! Dem gehe ich dann wohl eher später mal nach den ich bin eher Anwender als Programmierer 😉

    Moderator La Geek

    (@la-geek)

    Vielleicht funktioniert es damit, in dem Beispiel ist der Slug „das-ist-mein-kontakt“ und referenziert wird auf „mein-kontakt“.

    add_action('wp', function() {
        // Nur auf statischen Seiten ausführen
        if ( is_page() ) {
            // Den aktuellen Slug abrufen 
            $current_slug = get_post_field( 'post_name', get_post() );
    
            // Prüfen, ob der Teilstring "mein-kontakt" im Slug enthalten ist
            // Hinweis: Slugs sind in WP immer kleingeschrieben und Wörter oft durch Bindestriche getrennt
            if ( str_contains( $current_slug, 'mein-kontakt' ) ) {
                // Dein Code/Content
            }
        }
    });

    Funktioniert ab PHP 8.x

    Aber wie schon erwähnt, Code-Anfragen sind auf Stackexchange besser aufgehoben.

    Thread-Starter wpapm

    (@wpapm)

    @threadi @la-geek Danke euch beiden!

    Meine Lösung ist den Seiten einfach ein gemeinsames Template zu gönnen und das dann abzufragen ( if ( is_page_template(‚meintemplate‘)) Mein Template liegt dabei unter TwentyTwentyFive im Ordner templates/meintemplate.html … wird aber nur mit dem Template-Namen ohne Dateiendung aufgerufen. So jedenfalls mein Versuch eben.

    Moderator La Geek

    (@la-geek)

    @wpapm
    Danke für das Posten der Lösung. Yep, man muss auch kreativ und „out of the box“ denken, um alternative Lösungen zu finden 👍

Ansicht von 5 Antworten – 1 bis 5 (von insgesamt 5)

Du musst angemeldet sein, um auf dieses Thema zu antworten.