WordPress-Suche anpassen (HowTo): Unterschied zwischen den Versionen

Aus wiki.sehanka.de
Zur Navigation springen Zur Suche springen
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 8: Zeile 8:


= Arbeitsschritte (Prozess) =
= Arbeitsschritte (Prozess) =
== Schritt 1: Benötigte Template-Dateien anlegen & einbinden ==
=== Datei für das Template der Search Results Page anlegen ===
* "/search.php"
<syntaxhighlight lang="php">
<?php defined( 'ABSPATH' ) or die(); ?>
<?php get_header(); ?>
    <main>
        <div class="row-m">
            <div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>
            <?php function checkThumbnailUrl () {
                $thumbnail_url = get_the_post_thumbnail_url();
                if ( ! $thumbnail_url ) {
                    echo get_stylesheet_directory_uri() . '/assets/lpa-placeholder.png';
                } else {
                    echo  $thumbnail_url;
                }
            }
            ?>
        <?php
        $search_query = get_search_query();
        $wp_query = new WP_Query( array('s' => $search_query) );
        if ( $wp_query->have_posts() ) {
        _e("<h2>Search Results for: '".$search_query."'</h2>"."<div style='height:80px' aria-hidden='true' class='wp-block-spacer'>"."</div>"."<div class='grid-1 gap-30'>");
        while ( $wp_query->have_posts() ) :
        $wp_query->the_post();
        ?>
                    <a href="<?php the_permalink(); ?>" style="text-decoration: none;">
                      <p style="text-align: right; text-transform: capitalize; margin: 0;"><?php echo get_post_type(); ?></p>
                      <h3><?php echo the_title(); ?></h3>
                      <p><?php the_excerpt(); ?></p>
                    </a>
        <?php
        endwhile;
                _e("</div>");
        } else { ?>
                <h2>Nothing Found</h2>
                <div class="alert alert-info">
                    <p>Sorry, but nothing matched your search criteria. Please try again with some different keywords.</p>
                </div>
        <?php } ?>
            <div style="height:160px" aria-hidden="true" class="wp-block-spacer"></div>
        </div>
    </main>
<?php get_footer(); ?>
</syntaxhighlight>
=== Datei für Funktionen der Suche ===
* php/results.php
* in functions.php
<syntaxhighlight lang="php">
include 'php/results.php';
</syntaxhighlight>


== Schritt 1: Inhaltstypen aus Suche ausschließen ==
== Schritt 1: Inhaltstypen aus Suche ausschließen ==


=== Standard-Inhaltstypen ausschließen ===
=== Standard-Inhaltstypen Post und Page ausschließen ===


* schwierig bei den Standard-Inhaltstypen oder bei Inhaltstypen die von Plugins erstellt wurden
* schwierig bei den Standard-Inhaltstypen oder bei Inhaltstypen die von Plugins erstellt wurden
Zeile 31: Zeile 92:
</syntaxhighlight>
</syntaxhighlight>


=== Custom Post Type ausschließen ===
=== Custom Post Type in Plugin CPT-UI ausschließen ===
 
* möglich auch via Einstellungen im Plugin "CPT-UI"
* einfach in den Einstellungen des CPT "Exclude From Search" auf "true" setzen
 
=== Custom Post Type in den Register-Einstellungen ausschließen ===


* einfach in den »Attributen« den Wert <code>exclude_from_search</code> auf <code>true</code> zu setzen
* einfach in den »Attributen« den Wert <code>exclude_from_search</code> auf <code>true</code> zu setzen
* möglich auch via Einstellungen im Plugin "CPT-UI"
 
=== Custom Post Types in eigener Funktion ausschließen ===
 
<syntaxhighlight lang="php">
function ek_filter_search_results($query) {
if (!$query->is_admin && $query->is_search) {
$query->set('post_type', array('post', 'page', 'product'));
}
return $query;
}
add_filter('pre_get_posts', 'ek_filter_search_results');
</syntaxhighlight>


== Schritt 2: TBD ==
== Schritt 2: TBD ==

Aktuelle Version vom 27. April 2022, 15:40 Uhr

Allgemeines[Bearbeiten]

TBD

Vorangegangene(r) Prozess(e)[Bearbeiten]

Arbeitsschritte (Prozess)[Bearbeiten]

Schritt 1: Benötigte Template-Dateien anlegen & einbinden[Bearbeiten]

Datei für das Template der Search Results Page anlegen[Bearbeiten]

  • "/search.php"
<?php defined( 'ABSPATH' ) or die(); ?>
<?php get_header(); ?>
    <main>
        <div class="row-m">
            <div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>

            <?php function checkThumbnailUrl () {
                $thumbnail_url = get_the_post_thumbnail_url();
                if ( ! $thumbnail_url ) {
                    echo get_stylesheet_directory_uri() . '/assets/lpa-placeholder.png';
                } else {
                    echo  $thumbnail_url;
                }
            }
            ?>

	        <?php
	        $search_query = get_search_query();
	        $wp_query = new WP_Query( array('s' => $search_query) );

	        if ( $wp_query->have_posts() ) {
		        _e("<h2>Search Results for: '".$search_query."'</h2>"."<div style='height:80px' aria-hidden='true' class='wp-block-spacer'>"."</div>"."<div class='grid-1 gap-30'>");
		        while ( $wp_query->have_posts() ) :
			        $wp_query->the_post();
			        ?>
                    <a href="<?php the_permalink(); ?>" style="text-decoration: none;">
                      <p style="text-align: right; text-transform: capitalize; margin: 0;"><?php echo get_post_type(); ?></p>
                      <h3><?php echo the_title(); ?></h3>
                      <p><?php the_excerpt(); ?></p>
                    </a>
			        <?php
		        endwhile;
                _e("</div>");
	        } else { ?>
                <h2>Nothing Found</h2>

                <div class="alert alert-info">
                    <p>Sorry, but nothing matched your search criteria. Please try again with some different keywords.</p>
                </div>
	        <?php } ?>
            <div style="height:160px" aria-hidden="true" class="wp-block-spacer"></div>
        </div>
    </main>
<?php get_footer(); ?>


Datei für Funktionen der Suche[Bearbeiten]

  • php/results.php
  • in functions.php
include 'php/results.php';

Schritt 1: Inhaltstypen aus Suche ausschließen[Bearbeiten]

Standard-Inhaltstypen Post und Page ausschließen[Bearbeiten]

  • schwierig bei den Standard-Inhaltstypen oder bei Inhaltstypen die von Plugins erstellt wurden
  • man kommt nicht ohne weiteres an den Code ran
  • folgende Code-Snippet in functions.php schreiben und den Slug des auszuschließenden Inhaltstypen verändern
//exclude posts and pages from search results
function kb_exclude_from_search($post_type){
    global $wp_post_types;

    $wp_post_types['page']->exclude_from_search = true;
    add_post_type_support( 'page', 'page-attributes' );

    $wp_post_types['post']->exclude_from_search = true;
    add_post_type_support( 'post', 'post-attributes' );
}
add_action('registered_post_type', 'kb_exclude_from_search', 10, 2 );

Custom Post Type in Plugin CPT-UI ausschließen[Bearbeiten]

  • möglich auch via Einstellungen im Plugin "CPT-UI"
  • einfach in den Einstellungen des CPT "Exclude From Search" auf "true" setzen

Custom Post Type in den Register-Einstellungen ausschließen[Bearbeiten]

  • einfach in den »Attributen« den Wert exclude_from_search auf true zu setzen

Custom Post Types in eigener Funktion ausschließen[Bearbeiten]

function ek_filter_search_results($query) {
	if (!$query->is_admin && $query->is_search) {
		$query->set('post_type', array('post', 'page', 'product'));
	}
	return $query;
}
add_filter('pre_get_posts', 'ek_filter_search_results');

Schritt 2: TBD[Bearbeiten]

TBD

Schritt 3: TBD[Bearbeiten]

TBD

FAQ[Bearbeiten]

Frage 1[Bearbeiten]

TBD

Troubleshooting[Bearbeiten]

Lösung 1[Bearbeiten]

TBD

Nachfolgende(r) Prozess(e)[Bearbeiten]

TBD via Verlinkung zu anderem(n) HowTo(s)

Quellen[Bearbeiten]