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
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. –
Yup, cela devrait faire cela alors: 3, n'hésitez pas à demander si vous souhaitez une aide pour l'implémenter. – Ben
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. –