it-swarm.dev

Loop personalizzati, post appiccicosi e incubo di impaginazione

Ho provato di tutto. Ho guardato tutti. singolo. domanda. qui, su StackOverflow, il forum di aiuto WP, cercato su google 10 pagine e ho provato letteralmente OGNI combinazione di codice che ho potuto trovare, negli ultimi 2 giorni, e non riesco a far funzionare nulla come lo voglio io. Sicuramente non può essere impossibile? L'obiettivo sembra così semplice!

THE GOAL: Mostra TUTTI i post persistenti, quindi i post normali dopo di essi - WITH PAGINATION.

Esempio: con i post per pagina impostati su 10, con 15 post appiccicosi e 15 post normali, la pagina 1 sarebbe 10 post appiccicosi, la pagina 2 sarebbe 5 post appiccicosi e quindi 5 post normali e la pagina 3 corrisponderebbe a 10 post normali. Ordinato per data.

Ho provato più loop, varie domande e sono arrivato vicino ma finora nessun sigaro. Ecco cosa ho finora:

<!-- THIS CODE QUERIES ALL POSTS AND RETURNS ONLY STICKY POSTS, DISPLAYED AT TOP OF THE PAGE -->
<?php
// show only ads within this specific category
$term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy'));
//$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$sticky=get_option('sticky_posts');
$args=array(
    'post_type' => 'my_custom_post_type',
    'ad_cat' => $term->slug,
    'caller_get_posts' => 1,
    'post__in' => $sticky,
    'posts_per_page' => -1
    //'paged' => $paged
    );
query_posts($args);
?>
<?php get_template_part( 'loop', 'post_featured' ); ?>
<?php wp_reset_query(); ?>

<!-- THIS CODE QUERIES ALL POSTS AND RETURNS ONLY REGULAR POSTS, DISPLAYED BELOW THE STICKIES -->    
<?php
// show only ads within this specific category
$term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy'));
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$sticky=get_option('sticky_posts');
$args=array(
    'post_type' => 'my_custom_post_type',
    'ad_cat' => $term->slug,
    'caller_get_posts' => 1,
    'post__not_in' => $sticky,
    'paged' => $paged,
    );
query_posts($args);
?>
<?php get_template_part( 'loop', 'post_normal' ); ?>
<?php wp_reset_query(); ?>

Quanto sopra mostra TUTTI i post appiccicosi e quindi (5) i post normali. Questo è il più vicino che ho ottenuto, ma # 1, non voglio mostrare TUTTI i post appiccicosi sulla prima pagina, voglio aderire alle regole di impaginazione. # 2, TUTTI i post appiccicosi compaiono su tutte le pagine paginate. Quindi, se ho 50 post appiccicosi e 50 post normali, ogni pagina mostra 55 post: i primi 50 sono post appiccicosi e gli ultimi 5 sono normali, il che non è il mio obiettivo (vedi L'OBIETTIVO sopra).

C'è una semplice modifica a uno o entrambi i loop? Dovrei usare un doppio ciclo o c'è un'altra/migliore opzione per fare questo? Sono aperto a suggerimenti finché riesco a farlo funzionare. Dovrei notare: sto usando WP 3.2.1 e una funzione di impaginazione non plug-down ridotta che è stata presa da WP-PageNavi (la funzione di impaginazione completa può essere vista qui: http://paste2.org/p/1596821 ).

Qualsiasi aiuto è apprezzato!

1
RodeoRamsey

@Chris_O ha ragione ... i post attualmente appiccicosi non sono supportati nei tipi di post personalizzati quindi deve avere qualcosa a che fare con il tema che stai utilizzando.

Ora, trascurando il problema del CPT ... e supponendo che funzioni allo stesso modo degli stick di wordpress, l'obiettivo che stai descrivendo è esattamente il modo in cui i post "sticky" sono progettati per funzionare in wordpress (cioè mostrare tutti i post appiccicosi prima di mostrare i post normali e aderire alla paginazione), quindi da quello che posso dire il tuo problema sta nel fatto che stai cercando di creare due loop separati. Per visualizzare i post nel modo in cui vuoi che vengano visualizzati, dovresti utilizzare solo un ciclo.

Hai provato a eseguire solo un ciclo (ad esempio rimuovendo la seconda query e sostituendo la prima con qualcosa di simile al seguente per vedere se gli sticky vengono aggiunti automaticamente)?

$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;

$args=array(
  'post_type' => 'my_custom_post_type',
  'paged' => $paged,
  'posts_per_page' => 10
);
query_posts($args);

get_template_part( 'loop', 'post_normal' );
0
drebabels

Vorrei combinare il tuo ciclo di template con il codice sopra.

E quindi inserire alcune condizioni nel primo ciclo e nel secondo ciclo.

if($paged == 1) {
//Show Special Content for First

} else if($paged => 2) {
//Show Content for pages greater than 2

}

Questo probabilmente non funzionerebbe fuori dagli schemi, ma è sicuramente nella giusta direzione, utilizzando più condizioni per ottenere le impostazioni corrette che desideri.

Quindi, sono un nuovo utente con questo account sullo scambio di wordpress, non posso pubblicare commenti e chiedere di combinare il codice con "get_template_part ('loop')" o il modello di loop. Potrei probabilmente dare una risposta migliore da lì.

0
Anri