• Gelöst admarkt

    (@admarkt)


    Hi,

    die Linkvorschläge im Gutenberg Editor enthalten mittlerweile meistens vor allem die Tags, Kategorien oder Anhänge und keine direkten Post (siehe Screenshot). Gibt es eine Möglichkeit, dies anzupassen und so einzustellen, dass vor allem die Artikel und Seiten vorgeschlagen werden. Am besten wäre es, wenn ich bestimmte Formate komplett herausnehmen könnte.

Ansicht von 15 Antworten – 1 bis 15 (von insgesamt 16)
  • Hallo @admarkt
    ich kenne das Problem und kann daher nachvollziehen, dass das nervt. 😉

    Ich habe gerade auf Playground das folgende Snippet in die functions.php gepackt, das ich hier gefunden habe: https://wordpress.org/support/topic/how-to-limit-internal-link-search-to-posts-in-wordpress-6-7/. Das hat bei mir funktiomiert.

    Hier das Snippet:

    // Restrict searches to posts only
    function limit_search_posts($query) {
    if ( ! is_admin() && $query->is_search() ) {
        $query->set('post_type', 'post');
    }
        return $query;
    }
    add_filter('pre_get_posts', 'limit_search_posts');
    

    Verwende dazu bitte einen geeigneten Programmier-Editor (z. B. Notepad++). Das sollte an sich auch nur gemacht werden, wenn du ein Child Theme verwendest.

    Alternativ soll auch das Plugin https://de.wordpress.org/plugins/exclude-link-suggestions/ eine ähnliche Funktionalität bieten. Das hat aber bei mir leider nicht funktioniert.

    Viele Grüße
    Hans-Gerd

    Thread-Starter admarkt

    (@admarkt)

    Vielen Dank für die Hinweise,

    das Plugin hat leider auch bei mir nicht funktioniert und eher die Linkvorschläge im Gutenberg komplett zerschossen.

    Das Snippet hat bei mir vor allem die interne Suche im Frontend umgestellt. Das

    ! is_admin()

    scheint mir auch eher die Ausgabe der neuen Suche auf den Frontendbereich zu beschränken (auf Nutzer die nicht als Admin angemeldet sind) und nicht auf die Anzeigen im Adminbereich. Aber auch wenn ich es umstelle auf „is_admin()“ werden die Linkvorschläge im Editor nicht beeinflusst :/

    Habe ich da eventuell einen Denkfehler?

    Moderator La Geek

    (@la-geek)

    Es gibt einige Tickets dazu, vielleicht hilft dir das in irgendeiner Weise weiter:

    https://github.com/WordPress/gutenberg/issues/63683

    Thread-Starter admarkt

    (@admarkt)

    Vielen Dank, schaue ich mal durch.

    Thread-Starter admarkt

    (@admarkt)

    Leider scheint es aktuell keine einfache Möglichkeit zu geben, die Linkvorschläge im Gutenberg Editor einfach anzupassen. Die Filtermöglichkeiten scheitern meistens daran, dass nicht genug Links vorgeschlagen werden und grundsätzlich scheint eine Einschränkung auf bestimmte Formate derzeit nicht vorgesehen. Es bleibt also nur die Hoffnung, dass ein einer kommenden Version dies angepasst wird, denn so ist für mich die Linklisten leider kaum nutzbar.

    Moderator La Geek

    (@la-geek)

    @admarkt

    Ich war den ganzen August in Urlaub, daher die späte Antwort. Code, der bei mir funktioniert (in die functions.php meines Child-Themes eingefügt):

    // Erlaubte Posttypen hier einmal zentral definieren
    function my_allowed_link_post_types() {
        return array( 'post', 'page', 'mein_cpt_slug' ); // Slugs anpassen
    }
    
    add_filter( 'wp_link_query_args', function( $args ) {
        $args['post_type']   = my_allowed_link_post_types();
        $args['post_status'] = array( 'publish' ); // nur veröffentlichte Inhalte
        return $args;
    });
    
    // Nach der Abfrage filtern (Sicherheitsnetz)
    add_filter( 'wp_link_query', function( $results, $query ) {
        $allowed_post_types = my_allowed_link_post_types();
        $filtered = array_filter( $results, function( $item ) use ( $allowed_post_types ) {
            $post_type = get_post_type( $item['ID'] );
            return in_array( $post_type, $allowed_post_types, true );
        });
        return array_values( $filtered ); // Indizes neu setzen
    }, 10, 2 );
    Thread-Starter admarkt

    (@admarkt)

    Vielen Dank für den Code. Für mich sieht das ganz sinnvoll aus, aber ich habe ihn jetzt auf 4 Seiten getestet ohne das die Gutenberg Link-Suche verändert wurde. Die Tags und andere Typen sind weiter in der Suche, obwohl sie ja an sich durch die my_allowed_link_post_types ausgeschlossen sein müssten.

    Die Seiten arbeiten in der Regel mit Generatepress (Cache ist geleert) und haben keine weiteren Plugins, die Editor oder Suche beeinflussen würden. Woran könnte es noch liegen, dass dies bei mir nicht funktioniert?

    Moderator La Geek

    (@la-geek)

    Ich habe das definitiv nicht, bei mir funktioniert es einwandfrei, in Gutenberg und auch im Classic Editor.

    1.) Poste bitte mal den Code, so wie du ihn eingefügt hast.
    2.) Den Zustandsbericht einer der vier Websites.

    Thread-Starter admarkt

    (@admarkt)

    Den Code habe ich weitgehend unverändert übernommen:

    // Erlaubte Posttypen hier einmal zentral definieren
    function my_allowed_link_post_types() {
    return array( 'post', 'page' ); // Slugs anpassen
    }

    add_filter( 'wp_link_query_args', function( $args ) {
    $args['post_type'] = my_allowed_link_post_types();
    $args['post_status'] = array( 'publish' ); // nur veröffentlichte Inhalte
    return $args;
    });

    // Nach der Abfrage filtern (Sicherheitsnetz)
    add_filter( 'wp_link_query', function( $results, $query ) {
    $allowed_post_types = my_allowed_link_post_types();
    $filtered = array_filter( $results, function( $item ) use ( $allowed_post_types ) {
    $post_type = get_post_type( $item['ID'] );
    return in_array( $post_type, $allowed_post_types, true );
    });
    return array_values( $filtered ); // Indizes neu setzen
    }, 10, 2 );

    Der Zustandsbericht sieht wie folgt aus:

    wp-core

    version: 6.8.2
    site_language: de_DE
    user_language: de_DE
    timezone: Europe/Berlin
    permalink: /%postname%/
    https_status: true
    multisite: false
    user_registration: 0
    blog_public: 1
    default_comment_status: open
    environment_type: production
    user_count: 1
    dotorg_communication: true wp-paths-sizes


    advanced-cache.php: true wp-active-theme

    name: GeneratePress (generatepress)
    version: 3.6.0
    author: Tom Usborne
    author_website: https://generatepress.com/about
    parent_theme: none
    theme_features: core-block-patterns, widgets-block-editor, automatic-feed-links, post-thumbnails, post-formats, woocommerce, title-tag, html5, customize-selective-refresh-widgets, align-wide, responsive-embeds, editor-color-palette, custom-logo, menus, editor-styles, editor-style, widgets
    theme_path: /var/www/vhosts/digitalweek.de/apn-daten.de/wp-content/themes/generatepress
    auto_update: Deaktiviert wp-themes-inactive (4)

    generatepress child theme: version: 1.0, author: Bastian Ebert, Automatische Aktualisierungen deaktiviert
    Twenty Twenty-Five: version: 1.3, author: Das WordPress-Team, Automatische Aktualisierungen deaktiviert
    Twenty Twenty-Four: version: 1.3, author: Das WordPress-Team, Automatische Aktualisierungen deaktiviert
    Twenty Twenty-Three: version: 1.6, author: Das WordPress-Team, Automatische Aktualisierungen deaktiviert wp-plugins-active (11)

    Advanced Ads: version: 2.0.11, author: Advanced Ads, Automatische Aktualisierungen deaktiviert
    Antispam Bee: version: 2.11.8, author: pluginkollektiv, Automatische Aktualisierungen aktiviert
    Autoptimize: version: 3.1.13, author: Frank Goossens (futtta), Automatische Aktualisierungen aktiviert
    Koko Analytics: version: 2.0.14, author: ibericode, Automatische Aktualisierungen aktiviert
    OMGF: version: 6.0.7, author: Daan from Daan.dev, Automatische Aktualisierungen aktiviert
    Quick Adsense: version: 2.8.7, author: namithjawahar, Automatische Aktualisierungen aktiviert
    Rank Math SEO: version: 1.0.253, author: Rank Math SEO, Automatische Aktualisierungen aktiviert
    Statify: version: 1.8.5, author: pluginkollektiv, Automatische Aktualisierungen deaktiviert
    TablePress: version: 3.2.1, author: Tobias Bäthge, Automatische Aktualisierungen aktiviert
    WP Fastest Cache: version: 1.3.9, author: Emre Vona, Automatische Aktualisierungen aktiviert
    WProofreader: version: 2.8.0, author: WebSpellChecker, Automatische Aktualisierungen aktiviert wp-plugins-inactive (1)

    Popup Builder Exit Intent: version: 4.2, author: Sygnoos, Automatische Aktualisierungen aktiviert wp-media

    image_editor: WP_Image_Editor_GD
    imagick_module_version: Nicht verfügbar
    imagemagick_version: Nicht verfügbar
    imagick_version: Nicht verfügbar
    file_uploads: 1
    post_max_size: 8M
    upload_max_filesize: 8M
    max_effective_size: 8 MB
    max_file_uploads: 20
    gd_version: 2.3.3
    gd_formats: GIF, JPEG, PNG, WebP, BMP, XPM
    ghostscript_version: not available wp-server

    server_architecture: Linux 6.8.0-60-generic x86_64
    httpd_software: Apache
    php_version: 8.3.6 64bit
    php_sapi: fpm-fcgi
    max_input_variables: 1000
    time_limit: 30
    memory_limit: 128M
    admin_memory_limit: 256M
    max_input_time: 60
    upload_max_filesize: 8M
    php_post_max_size: 8M
    curl_version: 8.5.0 OpenSSL/3.0.13
    suhosin: false
    imagick_availability: false
    pretty_permalinks: true
    htaccess_extra_rules: true
    static_robotstxt_file: false
    current: 2025-09-17T08:20:26+00:00
    utc-time: Wednesday, 17-Sep-25 08:20:26 UTC
    server-time: 2025-09-17T10:20:25+02:00 wp-database

    extension: mysqli
    server_version: 10.11.13-MariaDB-0ubuntu0.24.04.1
    client_version: mysqlnd 8.3.6
    max_allowed_packet: 16777216
    max_connections: 151 wp-constants

    WP_MEMORY_LIMIT: 40M
    WP_MAX_MEMORY_LIMIT: 256M
    WP_DEBUG: false
    WP_DEBUG_DISPLAY: true
    WP_DEBUG_LOG: false
    SCRIPT_DEBUG: false
    WP_CACHE: false
    CONCATENATE_SCRIPTS: undefined
    COMPRESS_SCRIPTS: undefined
    COMPRESS_CSS: undefined
    WP_ENVIRONMENT_TYPE: undefined
    WP_DEVELOPMENT_MODE: undefined
    DB_CHARSET: utf8mb4
    DB_COLLATE: undefined wp-filesystem

    wordpress: writable
    wp-content: writable
    uploads: writable
    plugins: writable
    themes: writable
    fonts: does not exist
    Moderator La Geek

    (@la-geek)

    Du hast 2 Cache-Plugins installiert: Autoptimize und WP Fastest Cache. Lösche von beiden ALLE! Caches (auch minimized CSS usw.), deactiviere beide Plugins zum Test und schau anschl. ob die Linkergebnisse nun passen.

    Nachtrag:
    Und nicht vergessen: Browser-Cache und auch -Cookies löschen.

    • Diese Antwort wurde vor 10 Monaten von La Geek geändert.
    Thread-Starter admarkt

    (@admarkt)

    Autoptimize bringt ein paar Funktionen mit, die Fastest Cache nicht kann. Daher nutze ich gerne beiden miteinander.

    Testweise habe ich alle Plugins deaktiviert und das Theme auf Twenty25 umgestellt (Code in das neue Theme übernommen). Leider hat auch das keine Veränderung gebracht. Ich teste heute Abend nochmal mit einer komplett neue Installation.

    Moderator La Geek

    (@la-geek)

    Wo/wie hast du den Code eingefügt?

    Thread-Starter admarkt

    (@admarkt)

    Jeweils in der functions.php des aktiven Themes.

    Moderator La Geek

    (@la-geek)

    Das Deaktivieren von Cache-Plugins bringt manchmal nichts, da die Cache-Verzeichnisse noch vorhanden sind und evtl. durch .htaccess-Einträge getriggert werden.

    Schau mal per FTP nach in /wp-content und auch in /wp-content/uploads sowie in den Plugin-Ordnern ob dort Verzeichnisse „Cache“ vorhanden sind, diese einmal leeren, NACHDEM du die beiden Plugins deaktiviert hast. Und immer Browser-Cache leeren, ebenso mal in einem anderen Browser testen.

    Ferner: .htaccess-Datein umbenennen, dann Permalinks neu speichern (Backend, linke Seitenleiste -> Einstellungen).

    Nachtrag:
    Also, jetzt habe ich es auf einer anderen „reinen“ Installation getestet, dort funktioniert es nicht mehr richtig, zumindest in Gutenberg. Die Neuinstallation kannst du dir sparen.

    Moderator La Geek

    (@la-geek)

    Dieser Code scheint jetzt tatsächlich in Gutenberg zu funktionieren. Aber Achtung! Es ist Vibe Code, heißt, mithilfe von KI verfeinert. Es ist zwar ein abgehärteter Code, trotzdem: Verwendung auf eigene Gefahr – also wie eigentlich immer, wenn man Code-Snippets aus dem Internet übernimmt.

    /**
     * Restrict Gutenberg/Classic Editor link suggestions
     * to posts, pages and selected CPTs.
     * Safe version with sanitization and capability checks.
     */
    
    // 🔧 Erlaubte Posttypen hier definieren
    function my_allowed_link_post_types() {
        return array( 'post', 'page', 'mein_cpt_slug' ); // Slugs anpassen
    }
    
    /**
     * 1) Classic Editor: Vorschläge filtern
     */
    add_filter( 'wp_link_query_args', function( $args ) {
        if ( ! current_user_can( 'edit_posts' ) ) {
            return $args;
        }
        $args['post_type']   = my_allowed_link_post_types();
        $args['post_status'] = array( 'publish' );
        return $args;
    });
    
    add_filter( 'wp_link_query', function( $results ) {
        if ( ! current_user_can( 'edit_posts' ) ) {
            return $results;
        }
        $allowed = my_allowed_link_post_types();
        $filtered = array_filter( $results, function( $item ) use ( $allowed ) {
            $pt = get_post_type( $item['ID'] );
            return in_array( $pt, $allowed, true );
        });
        return array_values( $filtered );
    }, 10, 2 );
    
    /**
     * 2) Gutenberg / Block Editor: REST-API Antworten filtern
     */
    add_filter( 'rest_request_after_callbacks', function( $response, $handler, $request ) {
        if ( ! current_user_can( 'edit_posts' ) ) {
            return $response;
        }
    
        $route = $request->get_route();
    
        // Taxonomie-Suche raus
        if ( strpos( $route, '/wp/v2/search' ) !== false && $request['type'] === 'term' ) {
            return new WP_REST_Response( array(), 200 );
        }
    
        // Media-Suche raus
        if ( strpos( $route, '/wp/v2/media' ) !== false && ! empty( $request['search'] ) ) {
            return new WP_REST_Response( array(), 200 );
        }
    
        // Posts-Suche überschreiben
        if ( strpos( $route, '/wp/v2/search' ) !== false && $request['type'] === 'post' ) {
            $allowed   = my_allowed_link_post_types();
            $search    = sanitize_text_field( $request['search'] ?? '' );
            $per_page  = min( intval( $request['per_page'] ?? 20 ), 50 );
    
            $query = new WP_Query( array(
                's'              => $search,
                'post_type'      => $allowed,
                'post_status'    => 'publish',
                'posts_per_page' => $per_page,
            ) );
    
            $results = array();
            foreach ( $query->posts as $post ) {
                $results[] = array(
                    'id'      => $post->ID,
                    'title'   => wp_strip_all_tags( get_the_title( $post ) ),
                    'url'     => esc_url( get_permalink( $post ) ),
                    'type'    => 'post',
                    'subtype' => get_post_type( $post ),
                );
            }
    
            return new WP_REST_Response( $results, 200 );
        }
    
        return $response;
    }, 10, 3 );
Ansicht von 15 Antworten – 1 bis 15 (von insgesamt 16)

Das Thema „Gutenberg Linkvorschläge anpassen“ ist für neue Antworten geschlossen.