Je crée un site qui est fondamentalement comme un livre en ligne, et chaque article est un chapitre. Chaque chapitre reçoit une "page de garde" personnalisée, spécialement conçue, qui ne peut pas vraiment être conçue dans le Wordpress WYSIWYG. Certains aspects de chaque couverture peuvent être modélisés (comme un h1, un h2 et un paragraphe - tous les chapitres en auront), mais tout le reste sera spécial pour chaque chapitre. Cette "couverture" aura également des CSS spécifiques qui ne concernent que ce chapitre.
Idéalement, je serai capable de concevoir et de coder ces couvertures en dehors de Wordpress et d’être en mesure de pouvoir indiquer à chaque message quelle couverture utiliser. Que cela signifie que Wordpress importe réellement ce code ou l'inclut simplement dans un PHP, cela n'a pas d'importance. Je voudrais juste que cela soit aussi simple que possible.
Suggestions?
Une autre solution, qui n’appelle pas les attributs de page:
Allez télécharger le RW_Meta_Box
Library . Je suis l'un des auteurs/contributeurs.
Ici vous pouvez voir deux petits plugins (que j'ai écrits spécialement pour votre question).
Le premier est une dépendance de la bibliothèque RW Meta Box. Il vous suffit de modifier ce dont vous avez besoin (vérification du nombre d'utilisateurs) et de le télécharger dans votre dossier de plugins. La modification que vous devez apporter est assez simple: recherchez le rôle ou la capacité de l'utilisateur et ajoutez-le là où vous pouvez actuellement lire 'edit_theme_options'
. Cela devrait correspondre aux capacités de vos concepteurs mais pas à vos auteurs.
Il ajoute deux méta-boîtes textarea.
<?php
! defined( 'ABSPATH' ) AND exit;
/** Plugin Name: (#65707) »kaiser« Add Meta Boxes */
function wpse65707_add_meta_boxes()
{
// Don't add it for all users, but only for your designers
if (
! current_user_can( 'edit_theme_options' ) # CHANGE ME!!!
OR ! class_exists( 'RW_Meta_Box' )
)
return;
$prefix = 'wpse65707_';
$meta_boxes[] = array(
// Meta box id, UNIQUE per meta box
'id' => 'cover'
// Meta box title - Will appear at the drag and drop handle bar
,'title' => 'Designers Space'
// Post types, accept custom post types as well - DEFAULT is array('post'); (optional)
,'pages' => array( 'post' )
// Where the meta box appear: normal (default), advanced, side; optional
,'context' => 'normal'
// Order of meta box: high (default), low; optional
,'priority' => 'high'
// List of meta fields
,'fields' => array(
array(
'name' => 'Styles'
,'desc' => "Only valid CSS here"
,'id' => "{$prefix}styles"
,'type' => 'textarea'
,'std' => "h1 { color: #009ee0; }"
,'cols' => "40"
,'rows' => "8"
),
array(
'name' => 'MarkUp'
,'desc' => "Only valid HTML here"
,'id' => "{$prefix}markup"
,'type' => 'textarea'
,'std' => "<h1>Hello Me!</h1>"
,'cols' => "40"
,'rows' => "8"
)
)
);
# Add additional Meta Boxes here.
# For example a drop-down with a list of users that
# have a custom role of "Designer"
# (Hint) Use the "Members" plugin for that and
# WP_User_Query to get the users as values
foreach ( $meta_boxes as $meta_box )
new RW_Meta_Box( $meta_box );
}
# Performance: Only load on post edit & new admin UI screens.
add_action( 'load-post-new.php', 'wpse65707_add_meta_boxes' );
add_action( 'load-post.php', 'wpse65707_add_meta_boxes' );
Celui-ci se soucie maintenant de notre production.
Le 1st sa tâche consiste à ajouter nos styles au wp_head
- hook. De cette façon, nous avons la possibilité d’injecter le style personnalisé ajouté par Designer.
Les deuxdakota du Nord Pour ce faire, il ajoute l’ID de publication en cours au filtre post_class
pour la balise de modèle post_class();
. De cette façon, nous pouvons facilement cibler uniquement le contenu actuel de notre publication, sans rien.
Le 3rd la fonctionnalité est un analyseur. Cet analyseur permet à vos concepteurs d’ajouter des balises de modèle via une couche d’abstraction: Custom %Template Tags%
. Ainsi, tout ce qui est défini dans le wpse65707_custom_post_styles_parser
sera remplacé par la balise set template. La fonction elle-même est un rappel de filtre pour the_content
, vous n'avez donc pas besoin de changer quoi que ce soit pour que cela fonctionne avec le thème que vous utilisez.
<?php
! defined( 'ABSPATH' ) AND exit;
/** Plugin Name: (#65707) »kaiser« Custom Post Styles */
// Add custom styles to the `wp_head` hook in the header.php file.
function wpse65707_custom_post_styles()
{
$styles = get_post_meta( get_the_ID(), 'wpse65707_styles', true );
$styles = str_replace(
'%ID%'
,get_the_ID()
,$styles
);
return print "<style type='text/css>{$styles}</style>";
}
add_action( 'wp_head', 'wpse65707_custom_post_styles' );
// Add the plain ID to the post classes for easier styling
// Prevents overriding everything else outside
function wpse65707_post_class ( $classes )
{
$classes[] = get_the_ID();
return $classes;
}
add_filter ( 'post_class' , 'wpse65707_post_class' );
// Parse the content to add Template tags on the fly
function wpse65707_custom_post_styles_parser( $content )
{
$markup = get_post_meta( get_the_ID(), 'wpse65707_markup', true );
return strtr(
$markup
,array(
'%CONTENT%' => $content
,'%AUTHOR%' => get_the_author()
// Add other template tags here
)
);
}
add_filter( 'the_content', 'wpse65707_custom_post_styles_parser' );
single.php
& header.php
Les seules choses importantes pour que cela fonctionne avec un thème sont les balises de modèle suivantes à l'intérieur de ces deux fichiers:
header.php
doit avoir une balise wp_head()
.single.php
doit utiliser la fonction post_class();
sur la balise HTML post container div/article.single.php
doit utiliser the_content();
pour afficher son contenu.C'est simple: chaque balise de modèle autorisée dans wpse65707_custom_post_styles_parser()
sera échangée avec ce que votre concepteur a écrit.
// Example content for the "MarkUp"-Meta Box
<h1>Hello Me!</h1>
<h2>A fairy tale by %AUTHOR%</h2>
This is story of love and joy.
%CONTENT%
<p>We hope you liked it.</p>
Désormais, %CONTENT%
est remplacé par le contenu de publication réel et %AUTHOR%
, avec le nom complet de l'auteur. N'hésitez pas à l'étendre.
L'important est la balise seulement que vos concepteurs doivent utiliser pour préfixer leurs styles: La balise %ID%
. Cela garantit qu'ils ne ciblent rien en dehors du conteneur d'article actuel.
Utiliser des modèles de page.
function wpse65707_post_templates()
{
add_post_type_support( 'post', 'page-attributes' );
}
add_action( 'init', 'wpse65707_post_templates' );
Ensuite, téléchargez simplement un nouveau modèle pour chaque mise en page personnalisée.
Pour ajouter css à un article, ajoutez simplement une nouvelle feuille de style, que vous avez mise en file d'attente uniquement pour cette page.
function wpse65707_single_styles()
{
if ( ! is_single() )
return;
wp_enqueue_style(
'style_'.get_the_ID()
,get_stylesheet_directory_uri().'/single-styles/style-'.get_the_ID().'.css'
,array()
,filemtime( get_stylesheet_directory().'/single-styles/style-'.get_the_ID().'.css' )
);
}
add_action( 'wp_enqueue_scripts', 'wpse65707_single_styles' );
De cette façon, vous pouvez simplement ajouter un dossier nommé ~/single-styles
à votre thème, puis un fichier nommé style-IDHERE.css
à ce dossier qui ne met en file d'attente que pour cette page. C'est donc quelque chose qui se situe dans la lignée des feuilles de style contextuelles.
S'amuser!