Est-il possible de limiter un CPT à un seul? Ce que j'aimerais accomplir, c'est créer un CPT appelé "Home". Il gérera tous les éléments de la page d'accueil. Je souhaite le programmer afin que, lorsque l'utilisateur clique sur le lien "Gérer la page d'accueil", il passe directement à l'écran de modification. Ils passeront sur l'écran "Toutes les publications". Est-ce que quelqu'un pense que c'est même possible?
Ou peut-être que quelqu'un a une idée pour atteindre cet objectif de manière complètement différente?
Je suggérerais de créer une page Options de thème à cet effet.
https://wordpress.stackexchange.com/questions/tagged/theme-options
add_options_page () dans le Codex.
Ou y a-t-il quelque chose de spécial dans l'écran de post-édition que vous souhaitez utiliser qui serait difficile à obtenir dans la page Options de thème?
Vous voulez cela parce que votre client est confus et que placer une page sur la page d'accueil ne suffira pas.
Mais votre solution est une boîte de Pandore en attente d'exploser dans votre visage, alors à la place, j'ai une bien meilleure solution!
Utilisez le modèle home.php
Dans WordPress, home.php est utilisé par défaut comme page d'accueil. S'il n'est pas trouvé, le fichier page_page.php est utilisé. S'il n'est pas trouvé, il utilise le fichier index.php.
Créez donc home.php, insérez le code de votre page d’accueil, puis ajoutez une page de paramètres avec les éditeurs WYSIWYG et les téléchargeurs d’images pour les différents éléments de contenu. Vous pouvez même vous connecter directement à la page des paramètres à partir de l'interface si vous êtes connecté au site.
Si votre client est toujours confus, utilisez des étapes d'écran pour leur montrer comment. Il est fort probable que votre client ne soit confus que parce qu'il n'a pas investi le temps nécessaire pour lire les instructions ou les comprendre.
L'avantage supplémentaire est qu'il ne laisse aucune étape déroutante, comme cliquer sur les listes et trouver un seul poste disponible, et un bouton "ajouter une nouvelle page d'accueil" qui ne génère que des avertissements et des messages dont l'autorisation est refusée.
J'ai en fait fait quelque chose de très similaire à cela. J'ai utilisé plusieurs choses en même temps, et tout a très bien fonctionné pour mon client (facilement confus).
Fondamentalement, j'ai commencé avec une page appelée "home". Puis, en utilisant Champs personnalisés avancés , j'ai créé les différents champs que je voulais que le client puisse contrôler: deux champs WYSIWYG, plusieurs champs d'image, quelques-uns les champs de lien, vous avez l'idée. Ensuite, lors de la configuration des règles pour ce type d'ACF, j'ai masqué la zone principale "contenu" de la page d'édition. Je me suis assuré d'ajouter des règles claires et concises pour chaque domaine de contenu afin d'éviter toute confusion, afin qu'ils sachent exactement ce qu'ils pouvaient et ne pouvaient pas faire dans chaque domaine.
Ainsi, lorsque le client clique sur "modifier la page" dans le menu WordPress, la page "Modifier le message" de "Page d'accueil" lui est présentée avec toutes les zones contrôlées.
Ensuite, j'ai configuré le modèle home.php pour appeler la sortie de champ aux endroits appropriés. Plusieurs tutoriels et extraits de code de Nice sont disponibles sur le site principal d’ACF.
Cela a rendu un client TRÈS heureux, et a enlevé beaucoup de maintenance frustrante de mon assiette.
Steve, si j'ai bien compris, vous voulez:
Le code ci-dessous va modifier l’Administrateur de WordPress pour effectuer les opérations ci-dessus:
Notez que les utilisateurs peuvent toujours ajouter le message au type de message personnalisé à l'aide de wp_insert_post
.
<?php
/**
* Plugin Name: Home Page CPT
**/
class WPSE_26330_Homepage_CPT {
function __construct() {
// add the default homepage on plugin activation
register_activation_hook( __FILE__, array( &$this, 'add_home_page_post' ) );
// register the homepage post type
add_action( 'init', array( &$this, 'register_homepage_cpt' ) );
// add the menu link
add_action( 'admin_menu', array( &$this, 'edit_homepage_link' ) );
}
function edit_homepage_link() {
global $submenu, $pagenow;
// query the homepage posts
$homepage = new WP_Query( 'post_type=homepage' );
// if its new post page and we have homepage
if ( $pagenow == 'post-new.php' && $homepage->have_posts() ) {
wp_die('You cant add more then one homepage');
}
// if we have homepage post, show the edit link else the add homepage link
if ( $homepage->have_posts() ) {
$homepage->the_post();
$link = get_edit_post_link( get_the_ID(), 'return' );
$title = 'Edit Home Page';
} else {
// in case if the user has deleted the default post
$link = get_bloginfo( 'url' ). '/wp-admin/post-new.php?post_type=homepage';
$title = 'Add Home Page';
}
$submenu['edit.php'] = array( array( $title, 'manage_options', $link ) ) + $submenu['edit.php'];
}
function register_homepage_cpt() {
$args = array(
'label' => 'homepage',
'description' => 'Home Page post type',
'public' => true,
'show_in_menu' => false
);
register_post_type( 'homepage', $args );
}
function add_home_page_post() {
// on activation first regsiter the post type
$this->register_homepage_cpt();
// add the first and only post
$post_data = array(
'post_title' => 'Home Page',
'post_type' => 'homepage',
'post_statue' => 'publish',
'post_author' => 1
);
wp_insert_post( $post_data );
}
}
$GLOBALS['wpse_homepage_cpt'] = new WPSE_26330_Homepage_CPT;
?>