Frage

Ich möchte eine Schleife erstellen, in der 2 oder 3 Elemente aus meinem Blogroll wie folgt gespleißt werden:

<loop>
    <post1>
    <post2>
    <blogroll1>
    <post3>
    <blogroll3>        
</loop>

Ich werde Bilder und Auszüge für die Schleife verwenden, und das Ziel ist es, das zu bekommen wp_links Links, die genau wie die angezeigt werden wp_posts, Also, wenn ich tatsächlich die Links zum Links spleißen kann $post Irgendwie variabel und über sie schleifen, als wären sie Beiträge, das wäre großartig.

Die Beiträge durch das Erhalten der Beiträge durch get_bookmarks ist einfach, aber wie würde ich WP in den Gedanken fälschen, dass sie sie sind? $posts und wie würde ich sie in die anspeisen? $post Objekt?

War es hilfreich?

Lösung 3

Danke an alle. Hier ist die Lösung, mit der ich letztendlich endete. Anstatt in der Schleife selbst herumzuspielen, entschied ich mich, mich hineinzuschleudern the_post mit einer Funktion, die das Markup der Schleife mit Daten von Daten ausgeht $links.

    <?php
global $links;
global $links_count;
$links = get_bookmarks("limit=5");

function dg_archive_insert_links(){
    global $post;
    if (!is_singular()){
        add_action('the_post', 'dg_insert_links');
    }
}
add_action('wp', 'dg_archive_insert_links');

function dg_insert_links(){
    global $wp_query;
    global $links_count;
    global $links;
    if ( ($wp_query->current_post % 3) == 0 && ($wp_query->current_post > 0) && $links[$links_count]->link_url):
    ?>
    <div class="post type-post hentry">     
        <h2><a href="<?php echo $links[$links_count]->link_url; ?>" rel="bookmark" title='Click to read: "<?php echo $links[$links_count]->link_name; ?>"'><?php echo $links[$links_count]->link_name; ?></a></h2>
        <?php if ($links[$links_count]->link_description): ?><div class="entry-summary"><?php echo $links[$links_count]->link_description; ?></div><?php endif; ?>
        <?php if ($links[$links_count]->link_image && $links[$links_count]->link_description): ?>
            <a href="<?php echo $links[$links_count]->link_url; ?>" rel="bookmark" title="<?php echo $links[$links_count]->link_description; ?>" class="post_thumbnail" ><img src="<?php echo $links[$links_count]->link_image; ?>" width="150px" alt="<?php echo $links[$links_count]->link_description; ?>" /> </a>
        <?php endif; ?>         
    </div>
    <?php
    $links_count++;
    endif;
}

Es ist nicht erforderlich, einen neuen VAR zu erstellen, um zu zählen, da es bereits vorhanden ist $wp_query->current_post

Andere Tipps

Ich habe etwas Ähnliches ausprobiert (na ja, etwas anders, ich habe versucht, eine Zeitleiste zu erstellen, in der Beiträge und Kommentare in derselben Zeitleiste auftauchten) ...

Das Zusammenführen dieser beiden Arrays ist nicht einfach, da das Postobjekt völlig unterschiedliche Eigenschaften als das Link -Objekt enthält. Wenn Sie es tun wollten, müssten Sie eine Array -Karte über die von zurückgegebene Antwort ausführen get_bookmarks Damit jedes dieser Objekte der Struktur des $ post -Objekts entspricht; Fusionieren Sie dann die beiden Arrays und uort sie schließlich mit Ihrer eigenen Vergleichsfunktion. Viel Kopfschmerzen für sehr wenig Gewinn.

Wenn Sie gerade erst damit anfangen, sollten Sie Ihre Links zu einem benutzerdefinierten Beitragstyp machen, damit Sie Ihre Links und Beiträge in einer Abfrage zusammenführen können.

Oder noch besser, wenn Sie mit den Entwicklungsversionen von 3.1 arbeiten können, machen Sie Ihre Links zu einem Beitrag Format! Auf diese Weise gibt es überhaupt kein Durcheinander mit der Frage, und es funktioniert nur für Sie von der Fledermaus.

Bearbeiten: Ich habe diesen Code ursprünglich in einer separaten Antwort eingegeben. Ich folge Jan's Empfehlung, meine Antworten zu einem zu kombinieren, damit es klarer ist.

OK, das ist wirklich wackelig und ich wiederhole, dass ich nicht empfehle, dass Sie dies tun, aber wenn Sie müssen, sollte dies dies für Sie tun:

$links = get_bookmarks('show_updated=true');

/* Map the properties of the link to the structure of a post object */
$linkposts = array_map( 'link2postobj', $links );
function link2postobj( $obj ) {
    $post_object = array( 
        'post_name' => $obj->link_name,
        'post_content' => '<a href="'.$obj->link_href.'" >'.
                 $obj->link_name.'</a><p>'.
                 $obj->link_description.'</p>', // the "content"
        'post_author' => $obj->link_owner,
        'post_date' => $obj->link_updated,
        'post_status' => 'link', // just a tag to mark this as a link
        'guid' => $obj->link_href   );
        return (object)$post_object;
}

/* Merge links returned with posts in query */
global $wp_query;
$posts = array_merge( $wp_query->posts, $linkposts );

/* Sort together by your function (this uses link_updated date to merge in the timeline.
    Note that link_updated is not a reliable property to depend on. */
usort( $posts, 'sortbydate' );
function sortbydate( $a, $b ) {
    return ( strtotime($a->post_date) > strtotime($b->post_date) );
    }

/* now just loop through your timeline */
foreach ( $posts as $post ) :
    if ( 'link' == $post->post_status ) {
        // template for links here
    } else {
        setup_postdata( $post );
        // template for regular posts here
    }
endforeach;

Zusätzlich zu den anderen Problemen, die ich vorhersehte, habe ich festgestellt, dass das Feld Link_Updated nicht sehr zuverlässig ist (viele Links aus meiner DB wurden 0 als Link_Updated -Wert zurückgegeben). Sie müssen sich also wahrscheinlich die Daten ansehen, die Sie haben, und eine andere Funktion erstellen, um Ihre Links und Beiträge zu sortieren.

Erwägen Sie jedoch im Ernst, an die Blutungskante zu gelangen und alle Ihre Links zu wandern Beiträge mit dem "Link" -Format. Ich denke, was Sie versuchen zu tun, ist nur viel sinnvoller und die Zeit, die erforderlich ist, um ein Skript auszuführen und neue Beiträge für jede Ihrer Links zu erstellen, ist viel geringer als der Aufwand, ein Format wie dieses zu pflegen.

Sie können die normale WP -Schleife (keine Komplikationen benötigen) und get_bookmarks ($ args) verwenden, um die gewünschten Links zu erhalten.

Etwas wie das:

$i = 1;
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
//your posts here
if ($i&1) echo 'blogroll '.$i;//blogroll 2, 4, etc.
$i++;
<?php endwhile; endif; ?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top