wake-up-neo.com

Injizieren Sie Posts (aus einer bestimmten Kategorie) zwischen Posts in Loop

Ich möchte einen Beitrag (aus einer bestimmten Kategorie) zwischen Beiträgen in der WordPress-Schleife einfügen (z. B. "Sponsoren"). Beispiel:

P P P S
P P S P
P S P P

Wie kann ich das erreichen? Ich bin ein Anfänger mit Codierung, daher weiß ich nicht genug, um einen Loop selbst zu modifizieren. Gibt es Loop-Coding-Ninjas, die eine Lösung bieten können?

Beachten Sie, dass unten meine aktuelle Schleife ist. Es wird verwendet, um Beiträge nach Preis oder nach zufälliger Reihenfolge zu sortieren:

index.php

<?php while (have_posts() ) : the_post(); ?>
<h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
<?php  the_excerpt(); the_meta ();
endwhile; 

previous_posts_link();
next_posts_link();
?>

functions.php

function my_custom_query($query){
 if ( $query->is_home() && $query->is_main_query() ) {

  $sort= $_GET['sort'];

  if($sort == "A"){
   $query->set( 'orderby', 'Rand' );
   $query->set( 'posts_per_page', '2' );
  }

  if($sort == "B"){
   $query->set( 'meta_key', 'price' );
   $query->set( 'orderby', 'meta_value_num' );
   $query->set( 'order', 'DESC' );
   $query->set( 'posts_per_page', '2' );
  }
}
}

add_action( 'pre_get_posts', 'my_custom_query' );

Bearbeiten: Aktualisieren

Birgires Plugin funktioniert! Anfangs hatte ich Probleme, das Plugin für mein Thema zu bekommen. Das Problem war dieser Code, den ich in der Schleife in index.php verwende (ich benutze ihn, um das benutzerdefinierte Feld aufzurufen).

<?php
    global $wp_query;
    $postid = $wp_query->post->ID;
    echo get_post_meta($postid, 'price', true);
    wp_reset_query();
?>
6
leko

Der automatische Sponsor Posts Injector:

Hier ist eine Idee, die auf meiner Antwort auf die Frage basiert: Wie zeige ich die Anzahl Y von benutzerdefinierten Beiträgen nach jedem X normalen Beitrag?

Ich habe es hoffentlich ein bisschen nützlicher gemacht hier auf Github , aber es kann noch viel weiter verfeinert werden (zukünftige Arbeit).

Die SponsorPostsInjector-Klasse hilft Ihnen dabei, die sponsor -Postings mithilfe der Filter the_post, loop_start und loop_end automatisch in das Thema einzufügen.

Aktivieren Sie das Plugin und fügen Sie das folgende Beispiel zu Ihrer functions.php-Datei hinzu, um die Injektionen zu starten:

/**
 * Inject a sponsor post after the first post on the home page,
 * and then again for every third post within the main query.
 */

add_action( 'wp', 'my_sponsor_injections' );

function my_sponsor_injections()
{
    if( ! class_exists( 'SponsorPostsInjector' ) ) return;

    // We want the sponsor posts injections only on the home page:
    if( ! is_home()  ) return;

    // Setup the injection:
    $injector = new SponsorPostsInjector( 
        array(
            'items_before_each_inject' => 3,
            'items_per_inject'         => 1,
            'template_part'            => 'content-sponsor',
        ) 
    );

    // Setup the injection query:
    $injector->query(
        array(
            'post_type'  => 'sponsor',
            'tax_query'  => array( 
                array(
                   'taxonomy' => 'country',
                    'terms'   => 'sweden',    
                    'field'   => 'slug', 
                )
            )
        )
    );

    // Inject:
    $injector->inject();
}

hier haben wir die content-sponsor.php-Vorlagendatei in unserem aktuellen Themenverzeichnis erstellt, um das Layout der eingespeisten Sponsorbeiträge zu steuern.

Die Idee ist, dass dies auch für die Paginierung sorgen soll.

Sie können dies hoffentlich an Ihre Bedürfnisse anpassen.

6
birgire