2010-07-28 4 views
2

Je crée un thème Wordpress pour un client et il ne ressemble à aucun autre thème que j'ai construit auparavant en ce que la page d'accueil est une collection de messages répartis sur plusieurs différents récipients et styles. Il est censé ressembler à un magazine et, au début de chaque mois, 9 publications différentes sont publiées simultanément et appartiennent à une catégorie différente. Et la plupart des postes sont présentées différemment, je suis incapable d'utiliser la boucle traditionnelle:Custom Wordpress index.php qui contourne la boucle ne fonctionne pas correctement

<?php if(has_posts()) : while(has_posts)) : the_post(); ?> 
// do stuff 
<?php endwhile; endif; ?> 

D'abord, je vais vous expliquer comment je suis en train de résoudre le problème, puis décrire les problèmes que je vais avoir .

Au sommet de index.php, j'ai le code PHP suivant:

$slugPostMap = array(); 
$slugs = array(
    'art', 'big-idea', 'books', 'educators', 'film', 
    'ministry-update', 'music', 'parents', 'students', 
); 
$args = array(
    'limitposts' => 1, 
    'order'   => 'date' 
); 

foreach($slugs as $slug){ 
    $args['category_name'] = $slug; 
    $post = get_posts($args); 
    $slugPostMap[$slug] = $post; 
} 

Le tableau $slugs est une collection de chacune des limaces de catégorie que je vais avoir besoin d'interroger avec - chacun de ces aura un message à afficher. L'idée est que je peux boucler sur ce tableau et, en utilisant un ensemble de paramètres de requête ($args), trouver le post le plus récent pour chacun de ces slugs. Comme je suis en boucle sur le tableau de slug, je stocke le résultat de la requête dans un tableau associatif ($slugPostMap) où la catégorie slug "pointe" vers le post réel. Plus tard dans le corps de la page, je saisis le message requis de $slugPostMap en utilisant l'index slug de catégorie. Voici un exemple:

<?php 
foreach($slugPostMap['ministry-update'] as $p): 
    setup_postdata($p); 
?> 
<a class="homepageVideoPostTitle" href="<?php the_permalink(); ?>"><?php the_date('F Y','','',true); ?></a> 
<div class="homepageVideoPostSubtitle"> 
    <?php the_title(); ?> 
</div> <!-- end homepageVideoPostSubtitle --> 
<div class="homepageVideoPostContent"> 
    <?php the_excerpt(); ?> 
</div> 
<?php endforeach; ?> 

La raison pour laquelle j'utilise une boucle foreach au début parce que, si je comprends bien, plusieurs des balises de modèle Wordpress de base (the_title(), the_permalink(), etc.) ne sont disponibles que dans les La boucle. Parce que j'appelle manuellement setup_postdata() ici (ce qui est appelé dans les coulisses pendant The Loop), j'utilise aussi le foreach pour limiter la portée de tout weirdo vaudou quand j'appelle setup_postdata().

Pour la plupart, cela fonctionne. Dans l'exemple ci-dessus, les résultats de l'appel the_excerpt() apparaissent comme prévu. Cependant, certaines autres balises de gabarit ne renvoient aucune valeur (the_permalink() et the_title(), en particulier). Je ne reçois aucune erreur et la page se charge bien quand j'essaye ceci dans une installation réelle de Wordpress. Je suppose que le problème réside dans mon manque de compréhension de la façon de contourner correctement la boucle dans cette situation, mais le fait qu'il n'y ait aucune erreur ou tout autre indice quant au problème m'a amené ici.

Ceci est Wordpress 3.0 fonctionnant sur une certaine saveur de Linux. J'ai beaucoup d'autres installations Wordpress fonctionnant sur cette boîte sans problème et je suis capable d'utiliser cette même instance Wordpress avec le thème par défaut sans problème.

Merci pour votre temps - désolé pour le roman. S'il vous plaît laissez-moi savoir si je n'ai pas de détails pertinents que j'ai omis.

Répondre

0

Comme dans votre cas, je ne sais pas non plus ce qui se passe, mais que se passe-t-il si vous changez votre code de thème pour utiliser des fonctions qui fonctionnent en dehors de la boucle. Le get_permalink($id) et single_post_title() devrait faire ce que vous avez besoin.

0

Ces fonctions de gabarit utilisent: global $post; pour accéder aux informations de publication.

Au lieu de cela:

foreach($slugPostMap['ministry-update'] as $p):

vous devriez être en mesure d'utiliser simplement $ post comme la variable d'enfant:

foreach($slugPostMap['ministry-update'] as $post):

Questions connexes