Intereting Posts
Добавить идентификатор в пункты меню в wp_nav_menu Постоянная ссылка на пользовательскую таксономию перестала работать Добавить пользовательский столбец на странице списка пользователей Многоразовый блок контента Как реализовать только область комментариев wp на моем пользовательском сайте? Извлеките изображение из содержимого, назначьте его как признак, а затем удалите его из содержимого Правильно встраивать javascript в WP (используя функцию.php) – не работает? Переписывание базового имени Таксономия же Тип сообщения Как правильно использовать Категории с настраиваемыми типами сообщений В чем разница между использованием глобальных $ current_screen и get_current_screen ()? Зарегистрировать пользователей по электронной почте Использование короткого кода для остановки публикации сообщения Как назначить cron в wordpress для каждой секунды? Вызов функции PHP не работает в index.php Если я обновляю WordPress, мои пользовательские данные будут удалены из таблицы wp_users?

Как отобразить персонализированный пост в виде страницы (но неотредактированный)?

В моем плагине (мой первый) я вставил 2 сообщения с пользовательским post_type ('foo' для этого примера). Этот пост – это точно как страница, но неотредактированная (так скрытая в интерфейсе администратора). Я хотел бы отобразить это сообщение в интерфейсе в виде страницы (так что с шаблоном: page.php), когда пользователь нажимает кнопку с URL-адресом: – mysiteurl.com?post_type=foo&p=140, где 140 – это post ID.

Я получаю эту ошибку

Попытка получить свойство не-объекта в … \ wordpress \ wp-includes \ canonical.php в строке 120

<?php namespace MyNameSpace\FrontEnd; class FrontEnd { public function __construct(){ // Include dependencies $this->include_dependencies(); // Initialize the components $this->init(); } private function include_dependencies(){ ... } private function init(){ add_filter( 'template_include', array( $this, 'foo_subs_form_page_template'), 99 ); ... } public function foo_subs_form_page_template( $template ) { if ( is_page( 'foo' ) ) { $new_template = locate_template( array( 'page.php' ) ); if ( '' != $new_template ) { return $new_template; } } return $template; } } 

Что мне нужно для этого?

Чтобы использовать page.php специально, вы можете использовать фильтр template_include .

Вы также можете скопировать page.php в свою тему, сохранив его как single-foo.php , и затем он будет использоваться для ваших отдельных сообщений single-foo.php . Вы хотели бы сделать это в пользовательской или дочерней теме, а не напрямую редактировать родительскую тему, так что всякий раз, когда ваша тема обновляется, вы не теряете это редактирование.

Я нашел решение! Чтобы отобразить сообщение в виде страницы, мне нужно было выполнить следующие действия:

1) Зарегистрировать тип сообщения

 private function init(){ add_action( 'init', array( $this, 'create_post_type') ); } public function create_post_type() { register_post_type( 'foo', array( 'labels' => array( 'name' => __( 'Foos' ), 'singular_name' => __( 'Foo' ) ), 'public' => true, 'exclude_from_search' => true, 'has_archive' => true, 'show_in_menu' => false, 'show_in_nav_menus' => false, 'show_in_admin_bar' => false, 'rewrite' => true //<-- Important ! ) ); } 

2) Выберите шаблон

  private function init(){ add_action( 'init', array( $this, 'create_post_type') ); add_filter( 'template_include', array( $this, 'foo_page_template'), 99 ); } public function foo_page_template( $template ) { if ( get_post_type() === 'foo' ) { $new_template = locate_template( array( 'page.php' ) ); if ( '' != $new_template ) { return $new_template; } } return $template; } 

3) (Необязательно) Добавить классы тела

 add_action( 'body_class', array($this , 'add_body_classes' )); public function add_body_classes( $classes ) { // Add custom class $classes[] = 'page'; $classes[] = 'page-two-column'; return $classes; } 

Href был изменен mysiteurl.com/foo/my-post-name, и это работает, если вы не забудете 'rewrite' => true, когда вы используете register_post_type () !