как создать только один пользовательский тип записи?
Можно ли ограничить CPT только одним? Чего я хотел бы достичь, так это создать CPT под названием "Дом". Он будет управлять всеми элементами на домашней странице. Я хочу запрограммировать его так, чтобы, когда пользователь нажимает на ссылку "Управление домашней страницей", он переходил прямо на экран редактирования сообщения. Они будут пропускать экран "Все сообщения". Кто-нибудь думает, что это вообще возможно?
Или, может быть, у кого-то есть идея достичь этой цели совершенно по-другому?
5 answers
Я бы предложил создать страницу параметров темы для этой цели.
Https://wordpress.stackexchange.com/questions/tagged/theme-options
Add_options_page() в Кодексе.
Или есть ли что-то особенное на экране редактирования записи, что вы хотите использовать, что было бы трудно получить на странице параметров темы?
Вы хотите этого, потому что ваш клиент запутался, и установка страницы на домашнюю страницу не подойдет.
Но ваше решение - это банка с червями, готовыми взорваться у вас перед носом, поэтому вместо этого у меня есть гораздо лучшее решение!
Используйте home.php шаблон
В WordPress по умолчанию home.php используется в качестве домашней страницы. Если он не будет найден, front-page.php используется, и если это не найдено, он использует index.php
Так что создавайте home.php, поместите туда свой код домашней страницы и затем добавьте страницу настроек с редакторами WYSIWYG и загрузчиками изображений для различных частей контента. Вы даже можете напрямую перейти на страницу настроек с веб-интерфейса, если вошли на сайт.
Если ваш клиент все еще в замешательстве, используйте пошаговые инструкции, чтобы показать ему, как это сделать. Скорее всего, ваш клиент сбит с толку только потому, что он не потратил времени на то, чтобы прочитать инструкции или разобраться в этом.
Дополнительным бонусом этого является то, что он не оставляет никаких запутанных шагов, таких как нажатие на объявления и поиск одного доступного сообщения, и кнопка "добавить новую домашнюю страницу", которая ничего не делает, кроме как генерирует предупреждения и сообщения об отказе в разрешении.
Стив, я так понимаю, что ты хочешь:
- пользовательский тип записи без подменю "Все записи"
- вы просто хотите, чтобы ссылка "Редактировать домашнюю страницу" появилась в подменю "Сообщения"?
- И вы не хотите, чтобы ваши пользователи добавляли более 1 сообщения для этого конкретного типа сообщений.
Приведенный ниже код настроит администратора WordPress для выполнения вышеуказанного:
Примечание пользователи по-прежнему могут добавлять запись в пользовательский тип записи с помощью 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;
?>
На самом деле я сделал нечто очень похожее на это. Я использовал несколько разных вещей в сочетании, и все это очень хорошо работало для моего (легко запутываемого) клиента.
В принципе, я начал со страницы под названием "главная страница". Затем, используя Расширенные пользовательские поля, я создал различные поля, которыми я хотел, чтобы клиент мог управлять - два поля WYSIWYG, несколько полей изображений, несколько полей ссылок, вы поняли идею. Затем, при настройке правил для этого типа ACF, я скрыл основную область "содержимое" на странице редактирования. Я позаботился о том, чтобы добавить четкие и краткие правила для каждой области контента, чтобы избежать путаницы, чтобы они точно знали, что они могут и чего не могут делать в каждой области.
Итак, когда клиент нажимает "Редактировать страницу" в меню WordPress, ему открывается страница редактирования публикации для "Главная", со всеми областями, которыми он управляет, аккуратно выложенными.
Затем я настроил home.php шаблон для вызова поля вывода в нужных местах. Есть несколько хороших учебных пособий и фрагменты кода на главном сайте ACF.
Это сделало ОЧЕНЬ счастливого клиента и избавило меня от многих разочарований в будущем.