Sisu Marketing

WordPress: kuidas välistada leheteed (ja alamlehed) sisemisest saidiotsingust

Ma kavandasin, ehitasin ja käivitasin uue WordPress sait minu ettevõtte jaoks. Uue saidi osana on meil mõned manustatud videod, mida meil pole lubatud avalikult tarbida, kuid mida saab kasutada individuaalsetes müügi- ja partnervestlustes. Me ei tahtnud videoid piirata, kuid tahtsime veenduda, et need ei satuks teistele saitidele ega otsingumootoritesse.

Selle tagamiseks kontrollisin ma majutust ja SEO ülemlehe ja seotud alamlehtede seaded.

  • Ma majutasin videoid saidil Wistia kus me saaksime kontrollida nende juurdepääsu ja välist manustamist ainult meie domeenile.
  • Ma lõin meie saidile privaatse lehe sisukorraga ja seejärel panin iga video selle alla alamlehele.
  • Iga lehekülg turustati indekseerimata leheküljena ja see jäeti indeksist välja. XML saidikaart, kasutades Auaste matemaatika.
  • Ettevaatusabinõuna lisasin ka tee meie robots.txt fail käsuga "disallow".

WordPressi sisemine otsing

Need ettevaatusabinõud takistaksid videote väliselt indekseerimist otsingumootorite poolt. Siiski oli üks viis, kuidas külastajad said kogemata lehed leida ... saidi sisemise otsingu abil. WordPress ei paku võimalust lehti sisemisest otsingust välja jätta, seega lõin funktsiooni ja salvestasin selle saidi jaoks loodud kohandatud pluginasse.

Allolevas koodis kasutan ma teed private näiteks. See oleks ülemlehe kood ja kõik selle all olevad lehed jäetaks sisemistest otsingutest välja.

<?php
/**
 * Plugin Name: Exclude Custom Pages from Search
 * Description: Excludes pages under specified paths (and their subpages) from internal search results.
 * Version: 2.0
 * Author: Douglas Karr
 * Author URI: https://dknewmedia.com
 * License: GPL2
 */

/**
 * Array of path(s) to exclude.
 *
 * Add the slug(s) of the pages you wish to exclude, along with all their descendant pages.
 */
$excluded_paths = array(
    'private'
);

/**
 * Helper function to determine if the current page is one of the excluded pages or a descendant thereof.
 *
 * @return bool True if the current page is under an excluded path; false otherwise.
 */
function is_excluded_page() {
    global $post, $excluded_paths;
    if ( ! $post ) {
        return false;
    }
    
    // Loop through each excluded path.
    foreach ( $excluded_paths as $path ) {
        // Retrieve the page by its slug.
        $page = get_page_by_path( $path );
        if ( $page ) {
            // Get all ancestor IDs of the current page.
            $ancestors = get_post_ancestors( $post->ID );
            // Check if the current page is either the page with the given path or a descendant.
            if ( $post->ID === $page->ID || in_array( $page->ID, $ancestors, true ) ) {
                return true;
            }
        }
    }
    return false;
}

/**
 * Exclude the specified pages from internal search results.
 *
 * This function hooks into the 'pre_get_posts' filter and, when a front-end search query runs,
 * it removes any pages that match an excluded path (and their descendants) from the results.
 *
 * @param WP_Query $query The current query.
 * @return WP_Query The modified query.
 */
function exclude_custom_pages_from_search( $query ) {
    global $excluded_paths;
    
    if ( $query->is_search() && ! is_admin() && $query->is_main_query() ) {
        $exclude_ids = array();

        // Loop through each excluded path.
        foreach ( $excluded_paths as $path ) {
            // Retrieve the page with the specified slug.
            $page = get_page_by_path( $path );
            if ( $page ) {
                // Exclude the page itself.
                $exclude_ids[] = $page->ID;
                
                // Retrieve all descendant pages.
                $descendants = get_pages( array(
                    'child_of'  => $page->ID,
                    'post_type' => 'page',
                    'post_status' => 'publish',
                ) );
                foreach ( $descendants as $descendant ) {
                    $exclude_ids[] = $descendant->ID;
                }
            }
        }
        
        // Merge with any existing exclusions if necessary.
        $existing_excludes = $query->get( 'post__not_in' );
        if ( ! empty( $existing_excludes ) && is_array( $existing_excludes ) ) {
            $exclude_ids = array_merge( $existing_excludes, $exclude_ids );
        }
        
        // Apply the exclusions to the search query.
        $query->set( 'post__not_in', $exclude_ids );
    }
    
    return $query;
}
add_filter( 'pre_get_posts', 'exclude_custom_pages_from_search' );

See on täielik lahendus teatud lehtede ja nende järglaste välistamiseks WordPressi sisemisest otsingust.

Kuidas see plugin töötab

  1. Määrab välistatud teede massiivi ($excluded_paths) faili ülaosas. Sellele massiivile saate lisada rohkem mooduleid, et välistada mitu lehte.
  2. Määrab, kas leht tuleks välja jätta kaudu is_excluded_page() Funktsioon kontrollib, kas praegune leht vastab mõnele määratud lisandile või on see välistatud lehe järglane.
  3. Muudab otsingupäringut, kasutades pre_get_posts et eemaldada välistatud lehed ja nende alamlehed otsingutulemustest.
  4. Tagab, et erandid liidetakse koos kõigi olemasolevate eranditega post__not_in päringuparameeter.

See plugin muudab peamist otsingupäringut õigesti nii, et välistatud lehed ja kõik nende alamlehed ei ilmu otsingutulemustes.

Võimalikud täiustused

  • Kasutajaliides: Selle saab lisada paneelina lehtedele, postitustele ja kohandatud postitustüüpidele. Või saab lisada seadete lehe, kuhu saab lisada mitmesuguseid teid.
  • Dünaamiline nälkjate haldamine: Kõvakodeerimise asemel $excluded_paths failis saate luua WordPressi administraatori alas seadete lehe, mis võimaldab kasutajatel välistatud teid dünaamiliselt muuta.
  • Logimine või silumine: Kui teil on vaja kontrollida, kas leht on õigesti välistatud, lisage silumislogid, et kontrollida $exclude_ids massiiv oleks abiks.
  • Mitte-lehe postitustüüpide käsitlemine: See on spetsiaalselt loodud page postitustüübid. Kui teie sait sisaldab kohandatud postitustüüpe (CPT-d), mis järgivad sarnast hierarhiat.

Selle koodi kasutamiseks lisa oma pluginate kausta kaust (nt. exclude-from-search) ja seejärel kopeeri ülaltoodud kood kaustas asuvasse PHP-faili (nt. exclude-from-search.php). Aktiveerige plugin ja teie lehed jäetakse sisemistest otsingutest välja.

Douglas Karr

Douglas Karr on SaaS-i ja tehisintellekti ettevõtetele spetsialiseerunud turundusjuht, kes aitab laiendada turundustegevust, edendada nõudluse genereerimist ja rakendada tehisintellektil põhinevaid strateegiaid. Ta on ettevõtte asutaja ja väljaandja. Martech Zone, juhtiv väljaanne… Veel »
Tagasi üles nupule
lähedal

Adblock tuvastatud

Me toetume reklaamidele ja sponsorlusele, et säilitada Martech Zone tasuta. Palun kaaluge reklaamiblokeerija keelamist või toetage meid taskukohase ja reklaamivaba aastase liikmelisusega (10 USA dollarit):

Registreeru aastaseks liikmeks