Как добавить запись в блог, минуя админку WordPress

Алоха ребята! Долго думал, о чем же таком поведать и решил поделиться тем, с чем сам в свое время сталкивался: добавление записей на сайт не заходя в админ панель. В моем случае я нуждался дать возможность пользователям добавлять материал на сайт, но не хотел, чтобы они заходили в админку. Есть пару плагинов, которые решали мою проблему, но плагины были недостаточно гибкими под мои требования, и я решил искать другой метод. После некоторого времени поисков наткнулся на функцию wordpress wp_insert_post(). В этом уроке я покажу вам, как создать свою уникальную форму добавления новостей, используя данную функцию.

1. Создаем форму добавления

Я использовал онлайн генератор для создания форм под bootstrap. Вы можете использовать любой другой либо написать форму самостоятельно. Я же делаю это для примера, поэтому генератор сойдет :) Мы будем отправлять данные формы в другой файл, поэтому тег form должен содержать в себе method=“post” action=“handler.php”, где action – это название обработчика, на который мы отправим данные. Форму копируем, и вставим в файл который мы создадим ниже.

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


<meta charset="utf-8" />

<form method="post" action="<?php bloginfo('template_url'); ?>/handler.php" class="form-horizontal">
<fieldset>

<!-- Form Name -->
<legend>Form Name</legend>

<!-- Text input-->
<div class="form-group">
 <label class="col-md-4 control-label" for="title">Заголовок</label>
 <div class="col-md-4">
 <input id="title" name="title" type="text" placeholder="Введите заголовок" class="form-control input-md">
 <span class="help-block">Краткое название статьи</span>
 </div>
</div>

<!-- Select Basic -->
<label class="col-md-4 control-label" for="cat">Категория</label>
<?php wp_dropdown_categories('hide_empty=0&title_li=&name=cat&hierarchical=1&exclude=1'); ?>

<!-- Textarea -->
<div class="form-group">
 <label class="col-md-4 control-label" for="description">Материал</label>
 <div class="col-md-4">
 <textarea class="form-control" id="description" name="description"></textarea>
 </div>
</div>

<!-- Button -->
<div class="form-group">
 <label class="col-md-4 control-label" for="send"></label>
 <div class="col-md-4">
 <button id="send" name="send" class="btn btn-primary">Отправить</button>
 </div>
</div>

</fieldset>
</form>

2. Создаем файл для формы

Для того, чтобы внедрить форму, нужно зайти в Админ панель СтраницыДобавить новую и дать название странице, например “Добавить”, после чего сохранить. Далее нужно создать файл – шаблон для этой страницы. Подключаемся по фтп к серверу, где вы разместили ваш сайт, заходим в папку с шаблоном и создаем файл с названием add.php или любое другое, главное, чтобы вы понимали, что это за файл.

Открываем файл, вставляем в него ранее сгенерированную форму. Перед формой вначале файла вставляем

<?php /* Template Name: AddPost*/ ?> 

После данного кода вставляем форму.

AddPost – это название, которое будет отображаться в выборе шаблона.

3. Выбор шаблона для страницы

Заходим через админ панель в ранее созданную страницу “Добавить” и в выпадающем меню с правой стороны выбираем шаблон AddPost, который мы создали в предыдущем пункте. Сейчас, если мы просмотрим страницу “Добавить”, то увидим форму, которую генерировали в первом пункте.

Шаблон для страницы WordPress

4. Обработчик формы

В папке с шаблоном создаем файл handler.php, в который вставляем код

<?php
/* Define these, So that WP functions work inside this file */
define('WP_USE_THEMES', false);
require( $_SERVER['DOCUMENT_ROOT'] .'/wp-blog-header.php');
?>
<?php
if(isset($_POST['send']) == '1') {
 $post_title = $_POST['title'];
 $post_category = $_POST['cat'];
 $post_content = $_POST['description'];

 $new_post = array(
 'ID' => '',
 'post_author' => $user->ID,
 'post_category' => array($post_category),
 'post_content' => $post_content,
 'post_title' => $post_title,
 'post_status' => 'publish'
 );

 $post_id = wp_insert_post($new_post);

 // This will redirect you to the newly created post
 $post = get_post($post_id);
 wp_redirect($post->guid);
}
?>

Ну вот и все, наша простенькая форма для добавления записей из фронтенда готова. Саму форму вы можете внедрить в ваш шаблон. Для этого вставьте её в файл add.php вместо <?php the_content(); ?>. вставьте форму. Буду рад ответить на ваши вопросы, если таковы будут :) Не забываем делиться этой записью в социальных сетях, буду очень благодарен!



Хотите подобный функционал, верстку либо помощь в настройке вашего сайта?
Свяжитесь со мной

42 Комментария к “Как добавить запись в блог, минуя админку WordPress”

  • игорь ·
    03.07.2014 в 12:59
    #

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

    • Admin ·
      03.07.2014 в 17:32
      #

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

  • Сирожа ·
    25.07.2014 в 02:06
    #

    Выдает такую ошибку:
    Warning: require(W:/home/localhost/www/wp-blog-header.php) [function.require]: failed to open stream: No such file or directory in W:\home\localhost\www\mrpl\wp-content\themes\mrpl\handler.php on line 4

    Fatal error: require() [function.require]: Failed opening required ‘W:/home/localhost/www/wp-blog-header.php’ (include_path=’.;C:\php\pear’) in W:\home\localhost\www\mrpl\wp-content\themes\mytheme\handler.php on line 4 , как быть?

    • Admin ·
      25.07.2014 в 22:58
      #

      У вас что то с путями неладное, в первой ошибке у вас \themes\mrpl\handler.php во второй \themes\mytheme\handler.php, так как то ваша тема называется? Ошибку когда выдает ?
      Я проверил код, если вы делаете все правильно, все должно работать. Могу загрузить файлы если вам они нужны.

      • Сирожа ·
        27.07.2014 в 01:53
        #

        я просто переименовал mrpl на mytheme чтобы было понятнее, а в первой строке забыл! Ошибку выдает когда заполнил форму и отправляешь его в обработчик, те в самом handlere. Еще раз посмотрел, все сделал правильно и пути правильно прописаны и код, но чтото все равно стреляет ошибку.

        • Admin ·
          27.07.2014 в 23:32
          #

          Попробуйте скачать мой код, который я приложил к статье

  • Сирожа ·
    04.08.2014 в 00:50
    #

    После твита или +1 исчезает форма, но файлы для скачки не появляются.

    • Admin ·
      04.08.2014 в 01:41
      #

      Извините, моя ошибка. Отправил вам на почту ссылку с файлом.

  • Сирожа ·
    10.08.2014 в 19:57
    #

    Спасибо, но итог один и тот же, пробовал и с различными ролями и настройками, может требуется какие специальные конфигурации?

  • Сирожа ·
    10.08.2014 в 20:24
    #

    Так разобрался, только в обработчике приходится переписывать пути на локалке и реальном сервере. Вопрос второй: при публикации автоматически новость идет на сайт без премодерации, как ее настроить правильно и как сделать так, чтобы после публикации перенаправляло на выбранную страницу?

    • Admin ·
      10.08.2014 в 22:41
      #

      1. Ну я не знал что вы работаете на локалке
      2. Для того чтобы посты шли на модерацию, в файле обработчика, измените значение post_status на pending или draft (замените значение publish).
      3. Если данный код
      $post_id = wp_insert_post($new_post);

      // This will redirect you to the newly created post
      $post = get_post($post_id);
      wp_redirect($post->guid);

      вы не удалили, то должно перенаправлять.
      Если и так не работает, можете попробовать заменить старый wp_redirect на этот wp_redirect(get_permalink( $post_id ));

  • Ismail ·
    30.09.2014 в 19:05
    #

    Есть ли возможность работы с произвольными полями? Например у меня есть произвольное поле “Настроение” и туда вписывается некое значение.. Как добавить соответствующее поле в вашу форму?

    В любом случае спасибо за решение 😉

    • Admin ·
      02.10.2014 в 02:30
      #

      Можно сделать настроение, его нужно вносить в дополнительные поля пользователя, если я правильно понял вашу задумку.

      • Достан ·
        28.10.2014 в 02:27
        #

        Как в эту форму можно добавить произвольное поле и миниатюру для записи? Спасибо!

        • Admin ·
          08.11.2014 в 21:12
          #

          Чтобы добавить дополнительное поле, вам нужно в html форме создать еще одно поле допустим name=’pole’, в обработчике после wp_insert_post если вы хотите обновить существующее доп. поле вставьте строчку
          update_post_meta( $post_id, ‘my-custom-field’, ‘my_custom_field_value’ ); Соответственно пропишите свой key дополнительного поля, и значение. Если хотите добавить поле, тогда используйте функцию add_post_meta

  • king ·
    17.10.2014 в 14:50
    #

    А можно как то добавить в форму добавления ещё и поля – цена или город? Мне нужно это для доски объявлений, если можно то куда, что добавить? Заранее, спасибо!

  • Достан ·
    20.10.2014 в 00:43
    #

    А как добавить произвольные поля в эту форму?

  • Виктор ·
    02.11.2014 в 13:03
    #

    Здравствуйте! Статья замечательная, как раз то что искал, всё работает.
    ПОДСКАЖИТЕ только как добавить новую таксономию категорий в обработчик формы, так как сама форма новую таксономию выводит с содержимым но не обрабатывает…
    Буду очень признателен за вашу помощь)

    • Admin ·
      08.11.2014 в 21:04
      #

      Добрый вечер, скажите пожалуйста в файле handler.php строчки $post_category = $_POST[‘cat’]; и ‘post_category’ => array($post_category), присутствуют ? Потому что, я проверил, все должно работать.

  • Ян ·
    17.12.2014 в 12:26
    #

    Подскажите, а как добавить миниатюры? Можете расписать и вывод поля на html и код в handler?

  • Николай ·
    19.08.2015 в 19:01
    #

    Здравствуйте! А изображение к посту тоже можно с помощью этой функции добавить?

    • Admin ·
      01.10.2015 в 19:14
      #

      Можно, но намного проще добавлять изображения с помощью данного урока по wp_editor В уроке значение media_buttons поменяйте на true

  • Виктор ·
    14.09.2015 в 17:46
    #

    Как сделать что бы не добавлять файл addpost.php в качестве шаблона страницы, а что бы он сам при выполнении подключался к базе данных и выполнял описанные в этой статье задачи?

    • Admin ·
      01.10.2015 в 19:33
      #

      Файл о котором вы говорите вообще не подключается к базе, это простая форма, вы можете ее внедрить куда угодно, самое главное происходит в обработчике.
      Если у вас получится, можете попробовать создать файл в корне wordpress, и обращаться к нему напрямую http://вашсайт/file.php Но припоминаю, что у вас не получится это сделать. И я немного не понимаю логику, зачем так извращаться?

  • Роман ·
    20.01.2016 в 13:58
    #

    Добрый день! Подскажите пожалуйста, как сделать так, чтобы список категорий был в алфавитном порядке. Изначально это так и есть, но когда добавляешь новые они просто приписываются снизу, а это не очень удобной. Если я все правильно понял, то он выводится вот этой строкой “”, и наверное даже значение “cat”, отвечает за это, но что бы тут такого подправить не представляю))

    • Admin ·
      05.07.2016 в 18:20
      #

      Добрый день, добавьте в строчку
      hide_empty=0&title_li=&name=cat&hierarchical=1&exclude=1
      &orderby=name

  • Роман ·
    27.01.2016 в 14:54
    #

    Добрый день! Подскажите, возможно ли сделать так, чтобы в категориях в этой строке “” или в хроме она вот так отображается “select#cat.postform” список рубрик отображался в алфавитном порядке, а не добавлялись эти рубрики снизу после добавления?

    • Admin ·
      05.07.2016 в 18:16
      #

      Я вас не совсем понял, можете более конкретно сформировать суть вопроса?

  • Андрей ·
    27.04.2016 в 15:32
    #

    Добрый день! Спасибо за интересную статью! Попробовал, все работает. Единственный вопрос, как отправить статью на можерацию и избежать немедленной публикации. Это не очень удобно учитывая что люди любят постить СПАМ. Спасибо!

    • Admin ·
      05.07.2016 в 15:49
      #

      publish поменяйте на pending

  • Виталий ·
    23.05.2016 в 22:09
    #

    Эти записи будут сразу публиковаться? как сделать отправку на модерацию?

    • Admin ·
      05.07.2016 в 15:31
      #

      В строчке post_status publish поменяйте на pending

  • Семён ·
    05.07.2016 в 15:22
    #

    Сделал все по инструкции, но почему-то пусто

    • Admin ·
      05.07.2016 в 15:29
      #

      Добрый день, что именно пусто?

      • Семён ·
        05.07.2016 в 15:31
        #

        Разобрался, два url одинаковые были, один наложился на другой, другой вопрос, как далее эту форму вставить на страницу? вот ссылка ### , после ответа сотрите пожалуйста ссылку в этом комментарии.

        • Admin ·
          05.07.2016 в 15:49
          #

          Создаете файл, допустим page-template.php

          Копируете в него содержимое файла single.php (либо index.php), после чего вместо цикла (if have_posts() ) и так далее, вставляете форму из пункта 1.
          Вставляете в начале файла < ?php /* Template Name: Example Template */ ?>
          Где Example Template пишите название шаблона страницы, например Добавление новостей

          Создаете в админке Страницу (не запись, именно страницу), в правой колонке при создании этой страницы выбирайте шаблон с название которое вы написали вместо Example Template.
          На странице которую вы создали, появится ваша форма.

          Это все описано в данной статье в пункте 1, 2

  • Семён ·
    05.07.2016 в 15:33
    #

    Еше один вопрос, как сделать чтобы они попадали в определенную рубрику, без выбора рубрики и не публиковались сразу, а выходили на подтверждение

    • Admin ·
      05.07.2016 в 15:43
      #

      В строке где ‘post_category’ указываете примерно следующее
      ‘post_category’ => ‘ярлык_категории’,

      Хочу обратить ваше внимание, название категории должно быть прописано так, как написано в ярлыке(при создании, редактировании самой категории)
      Например Название – Тест
      Ярлык – test

      • Семён ·
        05.07.2016 в 15:55
        #

        переводит на без рубрики, точь в точь сделал.

        А как сделать, чтобы в черновики публиковалось в этой рубрике?

        • Admin ·
          05.07.2016 в 16:17
          #

          publish поменяйте на pending

  • Оставить отзыв

    (обязательно)

    (обязательно)


    Наши друзья
    - ARTtime - Блог о Photoshop и Дизайн
    - Блог о дизайне и арте
    Реклама