2012-06-23 3 views
1

Je pense que ma question précédente était trop compliquée et, pour être honnête, me déroutait, peu importe les gens qui essayaient de répondre.Wordpress PHP - catégories

J'ai actuellement à des pages, à la fois avec une catégorie de messages qui leur sont attribués, mais les deux pages de publication utilisent les mêmes content.php et content-single.php, mais j'étais les deux pages à utiliser différentes itérations de ces pages pour des raisons cosmétiques.

À titre d'exemple, visitez http://dev.n8geeks.com/blog/ et cliquez sur le premier article de blog. Il affiche une vignette, ce qui est cool et c'est ce que je veux. Cependant, maintenant sur la page "vidéos" comme vu ici; http://dev.n8geeks.com/videos/ (une fois là, cliquez sur le post) il montre également la boîte de vignettes (mais aucune vignette ne sera jointe sur cette catégorie de page de messages).

C'est pourquoi j'ai besoin d'user différentes versions de content.php et content-single.php, mais je ne sais tout simplement pas comment. Ce serait aussi génial si la page "vidéos" avait le même formatage que la page "blog", mais encore une fois, je ne sais pas comment y parvenir.

Le code que j'utilise pour la page "vidéos" actuelle est le suivant.

<?php get_header(); ?> 

<div id="content"> 
<div id="main"> 

<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 
<?php the_content(); ?> 
<?php endwhile; else: endif; ?> 

<?php query_posts('category_name='.get_the_title().'&post_status=publish,future');?> 
<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 
<h1 class="entry-title"><a href="<?php the_permalink(); ?>"> 
<?php the_title(); ?></a></h1> 
<p><?php the_content(); ?> 
<?php endwhile; else: endif; ?> 

</div> 
</div> 

<?php get_footer(); ?> 

Merci à l'avance, je vous remercie vraiment toute l'aide que vous ne croiriez pas - il est 04h33 et je vais fou à essayer de trouver une solution pour cela.

Cordialement

Répondre

1

encore très confus, haha, mais des sons de ce que vous voulez différents modèles pour afficher en fonction de la catégorie à laquelle le poste est lorsque vous affichez un seul poste?

Si oui, vous pouvez essayer de définir ce que vous single.php:

<?php get_header(); ?> 

    <?php 
     if (have_posts()) { the_post(); rewind_posts(); } 
     if (in_category(1) || in_category(2)) { 
      include(TEMPLATEPATH . '/single-cat1-2.php'); 
     } 
     else { 
      include(TEMPLATEPATH . '/single-default.php'); 
     } 
    ?> 

<?php get_footer(); ?> 

(de http://wordpress.org/support/topic/alternate-single-post-template-for-specific-categories)

Et créer les mono-cat1-2.php de 'fichiers et « simple default.php ', il suffit de l'ajouter à l'instruction if pour vérifier si le post est dans une certaine catégorie (ou catégories) et charger le bon template. Vous pouvez également utiliser l'ID, le nom et leur slug comme sélecteurs pour la fonction in_category, read more here. Kay, eh bien, vous avez besoin d'apprendre la programmation plugin pour vraiment faire cela. J'ai commencé un plugin rapide pour vous aider. Cela fonctionne, n'est tout simplement pas parfait. Vous pouvez certainement utiliser un système différent, comme attacher les catégories dans le menu de la catégorie, mais je n'ai pas envie de jouer avec l'API Settings pour cette page.

Alors créez un nouveau répertoire dans votre répertoire plugins, appelez PostCatTheme, un nouveau fichier là appelé index.php et mettre cela en elle:

<?php 
/* 
* Plugin Name: Post Category Templates 
*/ 
//Replace __FILE__ with whatever the real path is because of symbolic link 

/** 
* Allows declarations of which categories a single-post template is assigned to 
*/ 
class WordpressPostCatTheme 
{ 
    private $pluginDir, $templates; 

    function __construct() 
    { 
     $this->pluginDir = dirname(__FILE__); 

     add_action("init", array($this, "load")); 
     add_filter('single_template', array($this, 'get_post_template')); 
    } 

    public function WPCT_deactivate() 
    { 
     delete_option("PostCatTheme_templates"); 
    } 

    public function load() 
    { 
     register_deactivation_hook(__FILE__, array(&$this, 'WPCT_deactivate')); 

     $this->templates = get_option("PostCatTheme_templates"); 
     if ($this->templates === FALSE) 
     { 
      $this->templates = $this->get_post_templates(); 
      update_option("PostCatTheme_templates", $this->templates); 
     } 
    } 

    // This function scans the template files of the active theme, 
    // and returns an array of [category] => {file}.php] 
    public function get_post_templates() 
    { 
     $themes = get_themes(); 
     $theme = get_current_theme(); 
     $templates = $themes[$theme]['Template Files']; 
     $post_templates = array(); 

     $base = array(trailingslashit(get_template_directory()), trailingslashit(get_stylesheet_directory())); 

     foreach ((array)$templates as $template) 
     { 
      $template = WP_CONTENT_DIR . str_replace(WP_CONTENT_DIR, '', $template); 
      $basename = str_replace($base, '', $template); 

      // don't allow template files in subdirectories 
      if (false !== strpos($basename, '/')) 
       continue; 

      $template_data = implode('', file($template)); 

      $categories = ''; 
      if (preg_match('|Categories (.*)$|mi', $template_data, $categories)) 
       $categories = _cleanup_header_comment($categories[1]); 

      //The categories are split by a | (pipe), if there aren't any pipes, assume it's just 
      //one category, otherwise split at the pipe 
      if (empty($categories)) 
       continue; 

      if (strpos($categories, "|") === FALSE) 
       $categories = array($categories); 
      else 
       $categories = explode("|", $categories); 

      foreach ($categories as $category) 
      { 
       if (!empty($category)) 
       { 
        if (isset($post_templates[$category])) 
         throw new Exception("Error, category assigned to more than one template"); 

        if(basename($template) != basename(__FILE__)) 
         $post_templates[trim($category)] = $basename; 
       } 
      } 
     } 
     //file_put_contents($this->pluginDir . "/log", json_encode($post_templates)); 
     return $post_templates; 
    } 


    // Filter the single template value, and replace it with 
    // the template chosen by the user, if they chose one. 
    function get_post_template($template) 
    { 
     global $post; 

     $cats = wp_get_post_categories($post->ID); 

     //Go through each category, until one hits 
     foreach ($cats as $c) 
     { 
      $templateP = $this->templates[$c]; 

      if(!empty($templateP) && file_exists(TEMPLATEPATH . "/{$templateP}")) 
      { 
       $template = TEMPLATEPATH . "/{$templateP}"; 
       break; 
      } 
     } 
     return $template; 
    } 
} 

if (!isset($PostCatThemePlugin)) 
    $PostCatThemePlugin = new WordpressPostCatTheme; 
?> 

Après cela, dans le modèle de votre commande, ajoutez le code Categories: 1|2 dans la section d'en-tête (où Template Name est). Chaque fois que vous les modifiez ou les ajoutez, assurez-vous de désactiver et réactiver le plugin, pour actualiser le cache dans lequel ces informations sont stockées.

Pour obtenir l'ID d'une catégorie, modifiez une catégorie et dans l'URL, le numéro après tag_ID = est l'identifiant de la catégorie.

espoir qui aide certains,
Max

+0

Hey Mazz, ouais, très déroutant en effet! Donc, fondamentalement, je veux montrer différentes versions de content.php et content-single.php en fonction de la catégorie. Est-ce que le code ci-dessus fonctionne pour ça? Merci beaucoup pour votre temps. –

+0

Yup, cela devrait faire cela alors: 3, n'hésitez pas à demander si vous souhaitez une aide pour l'implémenter. – Ben

+0

J'ai essayé ça et ça n'a pas l'air de marcher, argh. Est-ce que je peux vous contacter pour résoudre ce problème? Je serais prêt à payer pour un correctif. –

Questions connexes