Добавить элементы пользовательского типа записи с фронтенда

Вопрос или проблема

Я пытаюсь выяснить, как сделать так, чтобы мой сайт на WordPress мог добавлять портфолио элементы с фронтенда. Плагины, такие как WP-User-Frontend, позволяют размещать материалы с фронтенда, но работают только с записями блога.

Существуют ли какие-либо способы или плагины, аналогичные wp-user-frontend, но позволяющие добавлять элементы пользовательского типа записи?

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

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

Вот простой пример;

if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == "my_post_type") {

//храните наши переменные поста в переменные для дальнейшего использования
//сейчас будет хорошее время для выполнения базовой проверки/валидации ошибок
//чтобы убедиться, что данные для этих значений установлены
$title     = $_POST['title'];
$content   = $_POST['content'];
$post_type="my_custom_post";
$custom_field_1 = $_POST['custom_1'];
$custom_field_2 = $_POST['custom_2'];    

//массив аргументов для вставки с помощью wp_insert_post
$new_post = array(
'post_title'    => $title,
'post_content'  => $content,
'post_status'   => 'publish',          
'post_type'     => $post_type 
);

//вставьте запись в базу данных, передавая $new_post в wp_insert_post
//сохраните наш ID поста в переменной $pid
$pid = wp_insert_post($new_post);

//теперь мы используем $pid (ID поста), чтобы помочь добавить метаданные поста
add_post_meta($pid, 'meta_key', $custom_field_1, true);
add_post_meta($pid, 'meta_key', $custom_field_2, true);

}

Ваша HTML-форма будет выглядеть примерно так;

<form method="post" name="front_end" action="" >
<input type="text" name="title" value="Заголовок моего поста" />
<input type="text" name="content" value="Содержимое моего поста" />
<input type="text" name="custom_1" value="Содержимое пользовательского поля 1" />
<input type="text" name="custom_2" value="Содержимое пользовательского поля 2" />
<button type="button">Отправить</button>
<input type="hidden" name="action" value="my_post_type" />
</form>

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

Это предназначено только как простой пример и не содержит серьезной проверки и валидации ошибок. Тем не менее, это дает вам основную структуру для того, что вам нужно, чтобы размещать материалы с фронтенда в ваши типы записей на бэкенде.

Также существует множество учебных пособий, которые расширяют эту тему на WPSE, если вы выполните поиск, вы найдете много информации.

<?php 

if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == "front_post") {

//храните наши переменные поста в переменные для дальнейшего использования
//сейчас будет хорошее время для выполнения базовой проверки/валидации ошибок
//чтобы убедиться, что данные для этих значений установлены
$title     = $_POST['title'];
$content   = $_POST['content'];
$tags   = $_POST['tag'];
$custom_field = $_POST['custom_1']; 
$post_type="frontpost";


//массив аргументов для вставки с помощью wp_insert_post
$new_post = array(
'post_title'    => $title,
'post_content'  => $content,
'tags_input'  => $tags,
'post_status'   => 'publish',
'post_category' => array('0',$_POST['cat']),          
'post_type'     => $post_type 
);

//вставьте запись в базу данных, передавая $new_post в wp_insert_post
//сохраните наш ID поста в переменной $pid
//теперь мы используем $pid (ID поста), чтобы помочь добавить метаданные поста
 $pid=wp_insert_post($new_post);

//теперь мы используем $pid (ID поста), чтобы помочь добавить метаданные поста
add_post_meta($pid, 'cust_key', $custom_field);


}
?>

    <div class="front-form col-sm-6">
        <form method="post" name="front_end" action="" >
            <input type="text" name="title" placeholder="Заголовок FrontPost" required />
             <textarea  name="content" placeholder="Содержимое FrontPost" rows="5" ></textarea>
            <input type="text" name="tag" placeholder="Теги FrontPost" />
            <input type="text" name="custom_1" placeholder="Содержимое пользовательского поля" />


            <span><?php wp_dropdown_categories( 'tab_index=10&taxonomy=category&hide_empty=0' ); ?></span>
            <button type="submit">Отправить</button>
            <input type="hidden" name="action" value="front_post" />
        </form>
    </div>

Попробуйте это, это поможет вам..! Акиб 🙂

//вставка поста
add_action(‘init’, function() {
if (isset($_POST[‘submit’])) {
if (!is_user_logged_in()) {
echo ‘Вы должны войти, чтобы отправить пост.’;
return;
}

        $title = sanitize_text_field($_POST['name']);
        $description = sanitize_textarea_field($_POST['description']);
        $create_post = array(
            'post_status' => 'publish',
            'post_type' => 'user', // Убедитесь, что тип записи 'user' зарегистрирован
            'post_title' => $title,
            'post_content' => $description,
        );

        $post_id = wp_insert_post($create_post);
        if(isset($_FILES['fileToUpload']) && !empty($_FILES['fileToUpload']['name'])){
            require_once( ABSPATH . 'wp-admin/includes/image.php' );
            require_once( ABSPATH . 'wp-admin/includes/file.php' );
            require_once( ABSPATH . 'wp-admin/includes/media.php' );

            $attachement_id = media_handle_upload('fileToUpload',$post_id);
            if(is_wp_error($attachement_id)){
                echo 'Ошибка загрузки !!';
            }else{
                set_post_thumbnail($post_id,$attachement_id);
            }
        }
        return  $post_id ? 'пост успешно создан' : 'ошибка при создании поста';
        if ($post_id) {
            $state = sanitize_text_field($_POST['state']);
            $country = sanitize_text_field($_POST['country']);
            $pincode = sanitize_text_field($_POST['pincode']);
            $college = sanitize_text_field($_POST['college']);

            update_post_meta($post_id, 'state', $state);
            update_post_meta($post_id, 'country', $country);
            update_post_meta($post_id, 'pincode', $pincode);
            update_post_meta($post_id, 'college', $college);

            echo 'Пост успешно создан!';
        } else {
            echo 'Не удалось создать пост.';
        }
    }
    
});

вот HTML часть

Имя
“>

Описание
“>

Выберите изображение для загрузки
“>

Штат
“>

Страна
“>

Почтовый индекс
“>

Название колледжа
“>

.

Ответ или решение

Добавление элементов кастомного поста с фронтенда в WordPress

В рамках разработки веб-сайта на WordPress может возникнуть необходимость обеспечить пользователям возможность добавления кастомных постов, таких как элементы портфолио, непосредственно с фронтенда. Это особенно актуально, поскольку многие плагины, такие как WP-User-Frontend, предлагают функционал только для стандартных постов блога. В данном ответе мы рассмотрим наиболее эффективные методы, включая использование плагинов и написание собственного кода.

1. Использование готовых плагинов

Если вы предпочитаете не углубляться в программирование, существуют плагины, которые могут значительно упростить процесс. К примеру, Gravity Forms — это платный плагин, который позволяет создавать формы для ввода данных, которые можно сопоставить с кастомными пост-типами, а также с кастомными полями.

Другим вариантом является плагин Custom Post Type UI, который в сочетании с формы может предоставить вам необходимую функциональность. Однако в большинстве случаев необходимые плагины будут платными, но они обеспечивают гораздо более продвинутую настройку и поддержку.

2. Создание пользовательской формы

Если ваш бюджет ограничен или вы хотите полностью контролировать процесс, вы можете создать свою форму для фронтенда. Ниже представлен базовый пример, как это можно сделать:

Шаг 1: Создание HTML формы
<div class="front-form">
    <form method="post" name="front_end" action="">
        <input type="text" name="title" placeholder="Название поста" required />
        <textarea name="content" placeholder="Содержимое поста" rows="5" required></textarea>
        <input type="text" name="custom_1" placeholder="Кастомное поле 1" />
        <input type="hidden" name="action" value="my_custom_post" />
        <button type="submit">Отправить</button>
    </form>
</div>
Шаг 2: Обработка данных с помощью PHP

Наполняем шаблон кода для обработки отправленных данных:

add_action('init', function() {
    if ('POST' == $_SERVER['REQUEST_METHOD'] && !empty($_POST['action']) && $_POST['action'] == 'my_custom_post') {

        // Запрос на получение данных и их обработка
        $title = sanitize_text_field($_POST['title']);
        $content = wp_kses_post($_POST['content']);
        $custom_field_1 = sanitize_text_field($_POST['custom_1']);

        // Параметры для добавления нового поста
        $new_post = array(
            'post_title'   => $title,
            'post_content' => $content,
            'post_status'  => 'publish',
            'post_type'    => 'portfolio' // ваш кастомный тип поста
        );

        // Вставляем пост в базу данных
        $post_id = wp_insert_post($new_post);

        // Добавляем кастомные поля
        if ($post_id) {
            add_post_meta($post_id, 'custom_field_1', $custom_field_1, true);
            echo "Пост успешно создан!";
        } else {
            echo "Ошибка создания поста.";
        }
    }
});
Шаг 3: Обеспечение безопасности и валидации

Для повышения безопасности вашего кода очень важно добавлять функции валидации и санирования данных. Используйте функции sanitize_text_field(), wp_kses_post() и другие функции WordPress для предотвращения атак хакеров (например, XSS).

Заключение

Создание возможностей для пользователей добавлять кастомные посты с фронтенда — это полезное и эффективное решение для большинства веб-сайтов на WordPress. Если вы хотите быстро реализовать этот функционал, рекомендую использовать плагины, такие как Gravity Forms. Однако, если вы ищете больше контроля и готовы к дополнительным усилиям, создание собственной формы — это отличный способ.

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

Оцените материал
Добавить комментарий

Капча загружается...