Domanda

Voglio creare un ciclo in cui 2 o 3 elementi da mio blogroll si innestano in questo modo:

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

sarò con le immagini e gli estratti per il ciclo, e l'obiettivo è di ottenere i link wp_links per visualizzare esattamente come la wp_posts, quindi se posso effettivamente giunzione nei collegamenti alla variabile $post in qualche modo e ad anello su di loro AS se fossero i messaggi, che sarebbe grande.

Come i messaggi tramite get_bookmarks è facile, ma come faccio a WP falso a pensare che siano $posts E come li ho impiombare nell'oggetto $post?

È stato utile?

Soluzione 3

Grazie a tutti. Ecco la soluzione che in ultima analisi, finito con. Piuttosto che guai nel circuito stesso, ho scelto di collegare in the_post con una funzione che ricrea la marcatura del loop utilizzando i dati $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;
}

Non c'è alcuna necessità di creare un nuovo var a contare, dal momento che esiste già $wp_query->current_post

Altri suggerimenti

Ho provato qualcosa di simile a quello (beh, un po 'diverso, quello che ho fatto è stato cercare di creare una timeline in cui i messaggi e commenti presentati nella stessa timeline) ...

Unire questi due array non è facile, perché l'oggetto post ha completamente diverse proprietà all'oggetto collegamento. Se si voleva farlo, dovreste eseguire una mappa serie sopra la risposta restituita dal get_bookmarks di rendere ognuno di questi oggetti conformi alla struttura dell'oggetto $ postale; quindi unire i due array, e poi finalmente usort utilizzando la propria funzione di confronto. Un sacco di mal di testa per molto poco guadagno.

Se siete appena iniziato con questo, perché non rendere il vostro link un tipo di messaggio personalizzato in modo che è possibile unire i tuoi link e messaggi in una query?

O meglio ancora, se si può lavorare con le versioni di sviluppo di 3.1, rendere il vostro link un post Formato ! In questo modo non c'è scherzi con la query a tutti, e che sarà solo lavoro per voi fuori del blocco.

Modifica: Originariamente ho inserito questo codice in una risposta separata. Sto seguendo la raccomandazione di Jan per unire le mie risposte in un modo che il suo più chiaro.

OK, quindi questo è davvero traballante, e ribadisco che io non consiglio di fare questo, ma se si deve, questo dovrebbe farlo per voi:

$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;

In aggiunta agli altri problemi prevedevo, ho notato che il campo link_updated non è molto affidabile (un sacco di link dalla mia DB ha restituito 0 come valore link_updated). Quindi, probabilmente avete bisogno di guardare i dati che avete e venire con una funzione diversa per ordinare i tuoi link e messaggi su.

Scherzi a parte, però, prendere in considerazione ottenere sul bordo sanguinamento e la migrazione di tutti i link in messaggi con il formato "link" . Credo che per quello che stai cercando di fare, rende solo molto più senso, e il tempo necessario per eseguire uno script e creare nuovi posti per ognuno dei tuoi link sarà molto meno di quanto il fastidio di mantenere un formato simile a questo.

Si potrebbe utilizzare il ciclo normale wp (senza bisogno di complicanze) e get_bookmarks ($ args) per ottenere i link che si desidera.

Qualcosa di simile a questo:

$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; ?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top