web-dev-qa-db-de.com

So bestellen Sie separate Suchergebnisse für individuelle Posts

Ich verwende die hier beschriebene Technik Separieren von benutzerdefinierten Post-Suchergebnissen und hier posts_groupby problem , um meine Suchergebnisse zu separieren und nach Post-Typ zu gruppieren. Das heißt, ich habe den folgenden Code.

In functions.php

add_filter('posts_orderby', 'group_by_post_type', 10, 2);
function group_by_post_type($orderby, $query) {
    global $wpdb;
    if ($query->is_search) {
        return $wpdb->posts . '.post_type DESC';
    }
    // provide a default fallback return if the above condition is not true
    return $orderby;
}

In search.php

<?php $last_type="";
$typecount = 0;
while (have_posts()){
    the_post();
    if ($last_type != $post->post_type){
        $typecount = $typecount + 1;
        if ($typecount > 1){
            echo '</ol>'; //close type container
        }
        // save the post type.
        $last_type = $post->post_type;
        //open type container
        switch ($post->post_type) {
            case 'post':
                echo "<h2>News Articles</h2><ol>";
                break;
            case 'page':
                echo "<h2>Pages</h2><ol>";
                break;
            case 'work':
                echo "<h2>Projects</h2><ol>";
                break;
            case 'bootlegs':
                echo "<h2>Bootlegs</h2><ol>";
                break;
            case 'directors':
                echo "<h2>Directors</h2><ol>";
                break;
            //add as many as you need.
        }
    } ?>

Dies funktioniert einwandfrei, es sei denn, ich habe keine Kontrolle über die Reihenfolge, in der die benutzerdefinierten Beitragstypen angezeigt werden. Ich vermute, dass sie von einer internen ID-Nummer bestellt werden, aber ich muss die Kontrolle über sie haben.

Wie kann ich das erreichen?

Vielen Dank!

1
Jacob

Welche Art von Kontrolle möchten Sie genau? Es gibt zum Beispiel Plugins, die eine Benutzeroberfläche bereitstellen, über die Sie Posts nach verschiedenen Parametern ordnen können.

Wenn Sie nur alle nach einem Parameter ordnen möchten, der sich nicht ändert, können Sie ihn einfach zu Ihrer Abfrage hinzufügen (da Sie nach mehreren Bedingungen ordnen können ):

if ($query->is_search) {
    return $wpdb->posts . '.post_type DESC, title DESC';
}

Bearbeiten:hier ist eine andere Frage Sie könnten nützlich finden.

1
montrealist

In diesem Fall ist die (sekundäre) Ersatzreihenfolge der Titel.

In functions.php:

add_filter( 'pre_get_posts', 'ordering_post_title_type');
function ordering_post_title( $query ) {

    if ( $query->is_search ) {
        $query->set('orderby','type title');
        $query->set('order','ASC');
    }

    return $query;

}
0
Ricardo Gerstl