it-swarm.com.de

So ändern Sie die Schleife in archives.php, um 11 Beiträge pro Seite und CSS-Stil zu erhalten

Ich habe meine Schleife in archives.php bearbeitet, um mit der Paginierung und dem Category Post List Widget zu arbeiten. Ich habe im Grunde alles aus zufälligem Code und Ideen zusammengesetzt und bin jetzt so weit von der Standard-Post-Abfrage entfernt, dass ich Probleme habe, wieder zum ersten zu gelangen. Der Grund, warum ich wieder zum ersten Punkt zurückkehren muss, ist, dass ich zwei Dinge brauche:

1) Mein Code bringt meine Kategorie-Posts durcheinander, wenn der Post zwei Kategorie-Tags hat. In diesem Fall werden sie in die falschen Kategorien eingeteilt (oder gar nicht).

2) Durch diese benutzerdefinierte Codierung habe ich auch die Abfrage nach "Tags" verloren, sodass die Tag-Seiten nicht richtig funktionieren.

Ich muss zurück zum Quadrat gehen, damit ich Tags und Kategorie-Posts so einrichten kann, dass sie korrekt angezeigt werden, aber innerhalb der korrekten <li>s, die ich schreibe. Ich bin mir nicht sicher, ob ich das Widget "Kategorie-Beitragsliste" überhaupt noch benötige, da ich, wenn ich mich nicht irre, die Funktionen "set_post_thumbnail_size();", "the_title();", "the_excerpt()" usw. ohne das Widget aufrufen und einfach meine eigenen Listenelemente gestalten kann.

Wie auch immer, hier ist der Code, den ich habe. Ich stelle mir vor, ich muss ein paar davon schrubben, um dorthin zurückzukehren, wo ich hin muss. Vielen Dank für die Hilfe, ich weiß das sehr zu schätzen.

<?php if (have_posts()) : ?>

<ul style="list-style-type:none;">

<?php
if ($paged == 0)
  $offset = 0;
else
  $offset = ($paged - 1) * 11;
global $post;
$category = get_the_category($post->ID);
$category = $category[0]->cat_ID;
$myposts = get_posts(array('numberposts' => 11, 'offset' => $offset, 'category__in' => array($category), 'post__not_in' => array($post->ID),'post_status'=>'publish'));
foreach($myposts as $post) :
setup_postdata($post);
?>


<li id="category_li">
    <div id="image_con">
        <div id="image_recent">
        <a href="<?php the_permalink(); ?>"><?php set_post_thumbnail_size( 200, 200 );
the_post_thumbnail(); ?></a>
        </div>
    </div>

    <div id="cr_content">
    <a href="<?php the_permalink(); ?>">
    <div class="gloss_glam_font"> <?php the_title(); ?></div>
    <hr>
    <div class="excerpt_cat"><?php the_excerpt(); ?></div>
    </a>
    </div>

    <div id="clearfix">
    </div>
</li>

<?php endforeach; ?>
<?php wp_reset_query(); ?>
</ul>


<?php while (have_posts()) : the_post(); ?>

<?php endwhile; ?>

<?php if (function_exists("pagination")) {
    pagination($additional_loop->max_num_pages);
} ?>
    <?php else :

        if ( is_category() ) { // If this is a category archive
        printf("<div class='post-content'><p><em><strong>Not Found:</strong> Sorry, but there aren't any posts in the &middot;<strong>%s</strong>&middot; category yet.</em></p></div>", single_cat_title('',false));
    } else if ( is_date() ) { // If this is a date archive
        echo("<div class='post-content'><p><em><strong>Not Found:</strong> Sorry, but there aren't any posts with this date.</em></p></div>");
    } else if ( is_author() ) { // If this is a category archive
        $userdata = get_userdatabylogin(get_query_var('author_name'));
        printf("<div class='post-content'><p><em><strong>Not Found:</strong> Sorry, but there aren't any posts by &middot;<strong>%s</strong>&middot; yet.</em></p></div>", $userdata->display_name);
    } else {
        echo("<div class='post-content'><p><em>No posts found.</em></p></div>");
    }

endif; ?>

BEARBEITEN

Okay, ich habe es bearbeitet und ich kann nicht herausfinden, wo ich bin. Ich verwende hier als Beispiel meine tag.php-Vorlage (nicht die category.php). Folgendes habe ich bisher getan (basierend auf dem Code von Chip in den Antworten):

function wpse63424_filter_pre_get_posts( $query ) {
    if ( ! is_main_query() ) {
        return $query;
    } else {
        if ( is_category() || is_tag() ) {
            $query->set( 'posts_per_page',11 );
        }
        return $query;
    }
}
add_filter( 'pre_get_posts', 'wpse63424_filter_pre_get_posts' );

$tag = get_query_var('tag');
$myposts = get_posts('tag__in' => array($tag));
foreach($myposts as $post) :
setup_postdata($post);

Ich habe gedacht, dass ich einen Filter von 11 Posts pro Seite gesetzt habe, nach einem bestimmten Tag frage, die Posts auf das Tag in diesem Array setze und dann die Posts entsprechend einrichte. Wenn ich nur get_posts () starte; es gibt 11 Beiträge pro Seite ungefiltert zurück, so dass ich weiß, dass der Code von Chip gut funktioniert. Ich glaube, ich verstehe noch nicht, wie die Funktionen richtig aufgerufen werden ...

5
MxmastaMills

Zunächst würde ich für das Layout und das CSS-Styling empfehlen, Vorlagendateien für die Kontexte zu erstellen, die Sie anpassen möchten. d.h. erstellen Sie einen category.php und einen tag.php für die Archivseiten der Kategorie bzw. des Tag-Index. Kopieren Sie in beiden Fällen archive.php (oder kopieren Sie index.php, falls dies nicht der Fall ist), und benennen Sie die Kopie in category.php um. Ändern Sie dann das Markup nach Bedarf.

Stellen Sie für CSS sicher, dass Sie in Ihrem Design body_class() verwenden, und verwenden Sie dann die CSS-Klassen * category und tag-based , die auf <body> tag angewendet werden.

Der nächste Schritt besteht darin, die Abfrage so anzupassen, dass für Indexseiten von Kategorie-/Tag-Archiven 10 anstatt 10 Beiträge pro Seite ausgegeben werden. Verwenden Sie dazu den Filter pre_get_posts. Fügen Sie den folgenden Rückruf und add_filter()-Aufruf zu functions.php hinzu:

function wpse63424_filter_pre_get_posts( $query ) {
    if ( ! is_main_query() ) {
        return $query;
    } else {
        if ( is_category() || is_tag() ) {
            $query->set( 'posts_per_page',11 );
        }
        return $query;
    }
}
add_filter( 'pre_get_posts', 'wpse63424_filter_pre_get_posts' );

Dieser Rückruf sagt WordPress:

  1. Wenn die Abfrage nicht die Abfrage main ist, geben Sie sie zurück, ohne sie zu ändern. (Dadurch wird beispielsweise verhindert, dass die Widget-Abfrage "Neueste Beiträge" oder Navigationsmenüs beeinflusst werden.)
  2. Wenn die aktuelle Seite entweder ein Kategoriearchivindex oder ein Tag-Archivindex ist, ändern Sie die Abfragevariable 'posts_per_page' in 11 und geben Sie die Abfrage zurück.
8
Chip Bennett

Ich weiß nicht, ob sich etwas mit der neuesten Version von WP (4.4+) geändert hat, aber is_main_query() gibt den Status "False Positive as-is" zurück. Es sollte sein:

function wpse63424_filter_pre_get_posts( $query ) {
    if ( ! $query->is_main_query() ) {
        return $query;
    } else {
        if ( is_category() || is_tag() ) {
            $query->set( 'posts_per_page',11 );
        }
        return $query;
    }
}
add_filter( 'pre_get_posts', 'wpse63424_filter_pre_get_posts' );
1
darrinb