0
165
2019-02-20

WP RECALL - Настраиваем публикацию пользователями личных (приватных) записей

Информация будет полезна при реализации личного кабинета (реализованного на CMS WordPress) основная функциональность которого посвящена отправке заявок пользователями сайта с интерфейса личного кабинета реализованного при помощи плагина WP Recall.
Понравилась страница? Поставь свою оценку!
PLUGIN_STAR_RATINGS.SCORE_TEXTPLUGIN_STAR_RATINGS.VOTES_TEXT

Перед тем как начать, советую Вам обратить внимание на данный пост:

https://techblog.sdstudio.top/blog/wp-post-popup-otlichnyj-plagin-dlya-otobrazheniya-kontenta-stranic-i-zapisej-v-vsplyvayushem-okne

Дело в том что данный пост по сути продолжения работы над задачей которую я начал решать в посте по ссылке выше. А задача заключалась в создании личного кабинета для пользователей, при помощи плагина WP Recall.

Устанавливаем плагин MB Custom Post Type

Внешний вид плагина MB Custom Post Type на страница магазина WordPress

Установить плагин можно по ссылке ниже:

https://ru.wordpress.org/plugins/mb-custom-post-type/

Описание плагина MB Custom Post Type

Плагин позволяет легко создавать и управлять пользовательскими типами записей и пользовательскими таксономиями в WordPress, предоставляя простой в использовании интерфейс в области администрирования.

Плагин позволяет обрабатывать все аргументы типа записей и аргументы таксономии, такие как метки меню, метки панели администратора, исключать из поиска, отключать страницу архива и т. д.. Теперь создание кастомного типа записей займет всего несколько минут. Вам больше не нужно писать собственный PHP-код для регистрации пользовательских типов записей (используя функцию register_post_type() и register_taxonomy()).

Примечание. Начиная с версии 1.1.0 плагин имеет встроенную пользовательскую таксономию для создания и управления пользовательскими таксономиями с аналогичным интерфейсом.

Видео демо :

Возможности плагина

Поддерживает все аргументы для создания пользовательских типов записей.

Поддерживает все аргументы для создания пользовательских таксономий.

Поддерживает режим редактирования в реальном времени , который автоматически заполняет все необходимые метки за вас.

Экспорт в код PHP (с версии 1.4)

Чистый код

Зарегистрированные пользовательские типы записей могут быть экспортированы / импортированы с использованием функциональности WordPress по умолчанию.

Полезные ссылки плагина

Страница проекта

Github Repo

Этот плагин представляет собой бесплатное расширение плагина Meta Box , который представляет собой мощное профессиональное решение для создания пользовательских мета-блоков и пользовательских полей для веб-сайтов WordPress. Использование MB Custom Post Type в сочетании с другими расширениями поможет вам легко управлять любыми типами контента в WordPress и сделает ваш сайт более профессиональным.

Создаем пользовательский тип записей на примере моих настроек

Скриншот с настройками плагина MB Custom Post Type

Скриншот получился огромным но уверен так будет более наглядно. На всякий случай если Вы не хотите использовать плагин, можете воспользоваться кодом ниже. Он полная аналогия настроек плагина просто в чистом коде:

function insurance_register_post_type() {

    $args = array (
        'label' => esc_html__( 'Страховки', 'insurance-domain' ),
        'labels' => array(
            'menu_name' => esc_html__( 'Страховки', 'insurance-domain' ),
            'name_admin_bar' => esc_html__( 'Страховка', 'insurance-domain' ),
            'add_new' => esc_html__( 'Добавить новую', 'insurance-domain' ),
            'add_new_item' => esc_html__( 'Добавить Страховку', 'insurance-domain' ),
            'new_item' => esc_html__( 'Новая Страховка', 'insurance-domain' ),
            'edit_item' => esc_html__( 'Редактировать Страховку', 'insurance-domain' ),
            'view_item' => esc_html__( 'Просмотреть Страховку', 'insurance-domain' ),
            'update_item' => esc_html__( 'Update Страховка', 'insurance-domain' ),
            'all_items' => esc_html__( 'Все Страховки', 'insurance-domain' ),
            'search_items' => esc_html__( 'Поиск Страховок', 'insurance-domain' ),
            'parent_item_colon' => esc_html__( 'Родитель Страховки', 'insurance-domain' ),
            'not_found' => esc_html__( 'Страховки не найдены', 'insurance-domain' ),
            'not_found_in_trash' => esc_html__( 'Запись Страховки в корзине', 'insurance-domain' ),
            'name' => esc_html__( 'Страховки', 'insurance-domain' ),
            'singular_name' => esc_html__( 'Страховка', 'insurance-domain' ),
        ),
        'public' => true,
        'description' => 'Тип записей созданный специально для страховок',
        'exclude_from_search' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_nav_menus' => true,
        'show_in_admin_bar' => true,
        'show_in_rest' => true,
        'menu_position' => 26,
        'menu_icon' => 'dashicons-shield-alt',
        'capability_type' => 'post',
        'hierarchical' => false,
        'has_archive' => false,
        'query_var' => true,
        'can_export' => true,
        'rewrite_no_front' => false,
        'rest_base' => 'insurance',
        'supports' => array(
            'title',
            'editor',
            'author',
            'thumbnail',
            'excerpt',
            'trackbacks',
            'custom-fields',
            'revisions',
            'page-attributes',
        ),
        'rewrite' => true,
    );

    register_post_type( 'insurance', $args );
}
add_action( 'init', 'insurance_register_post_type' );

Указываем свои правила при редиректе после публикации записи

Данный код перенаправит пользователя на страницу с записями после того как он опубликовал запись в личном кабинете созданном при помощи плагина WP Recall. Добавляем в function.php:

// ==========================================================
// Добавляем редирект после публикации
// START

//Получить ID текущего пользевателя

$current_user_id = get_current_user_id();

function add_some_redirect() {  

    wp_redirect('/account/?user='. $current_user_id .'&tab=publics');  
    exit;
}
add_action('update_post_rcl', 'add_some_redirect');

// END
// Добавляем редирект после публикации
// ==========================================================

Присваиваем кастомному типу записей статус приватного при публикации

Данный код присваивает опубликованной записи приватный статус, благодаря которому Вы можете не переживать за то что запись пользователя может быть доступна всем на Вашем сайте (а уж способов узнать ссылку на публикации поверьте очень много). Функцию ниже добавляем все туда же в function.php:

// ==========================================================
// Функция делающая кастомный тип записи приватной по умолчанию при публикации записи
// https://stackoverflow.com/questions/54508808/how-can-users-with-the-role-of-author-be-allowed-to-publish-a-user-defined-typ
// START
add_action( 'transition_post_status', 'wpse118970_post_status_new', 10, 3 );
function wpse118970_post_status_new( $new_status, $old_status, $post ) { 
    if ( $post->post_type == 'refbek' && $new_status == 'publish' && $old_status  != $new_status ) {
        $post->post_status = 'private';
        wp_update_post( $post );
    }
} 

// END
// Функция делающая кастомный тип записи приватной по умолчанию при публикации записи
// ==========================================================

Вот это и есть основные моменты которые необходимо предпринять для реализации приватных записей которые смогут публиковать пользователи на Вашем WordPress сайте. Благодаря чему Вы можете позволить пользователю отправлять заявки и не только с внешнего интерфейса сайта (в личном кабинете).

Остальная работа должна вестись каждым из Вас в настройках плагина WP Recall и конечно же в каждом случае настройки WP RECALL будут уникальны, по этому расписывать здесь полностью все шаги не вижу смысла. Я выписал самое важное, что и мне в том числе может пригодиться во время решения задач в будущем.