idea
  • 0
Новичок

Редактировать публикацию или пользовательскую форму

  • 0

У меня есть блог, который в значительной степени зависит от пользовательского контента.

Я хотел бы, чтобы мои пользователи могли создавать сообщения, но сообщения должны иметь только определенные поля:

  • заглавие
  • содержание
  • прикрепленное изображение
  • два поля метаданных (широта, долгота из Google Maps)
  • теги (только уже существующие теги)

Лучше ли:

а) предоставить пользователям доступ к экрану редактирования сообщения и изменить его стиль (возможно ли это?) или б) разработать пользовательскую страницу/форму для отправки сообщения?

До сих пор я выбрал второй вариант (код ниже), но я не уверен, правильно ли я поступаю.

if (isset($_POST['photo-title']) && !empty($_FILES) ) { 

    // The user submitted the form.

    // Create the post object.
    $post = array(

         // Forget the lack of validation for now ;)

         'post_title' => $_POST['photo-title'],
         'post_content' => $_POST['photo-description'],
         'post_status' => 'publish',
         'post_type' => 'post',
         'post_author' => $user_ID,
         'post_category' => array(5)
      );

    // Insert the post into the database.
    $post_id = wp_insert_post( $post );

    // If the post was successful
    if ($post_id) {

        // Add metadata for the photo
        add_post_meta($post_id, 'ob_latitude', $_POST['latitude']);
        add_post_meta($post_id, 'ob_longitude', $_POST['longitude']);
    }


    // Handle the photo upload.
    $attach_id = media_handle_upload('photo', $post_id );
}
Share
  1. Вы находитесь на более безопасной стороне и требуете меньше усилий, если у них есть доступ к интерфейсу администратора.

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

    С некоторыми дополнительными плагинами (такими как Members или любой другой, способный редактировать роли и возможности) вы даже можете назначать разрешения на редактирование этого типа сообщений только тем пользователям, которые должны иметь возможность.

    Все это довольно хорошо задокументировано в Кодексе и относительно легко делается.

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

    Обновление: разработка формы публикации на интерфейсе.

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

    Где найти вещи

    Для начала я бы внимательно посмотрел на следующие файлы, чтобы убедиться, что вы понимаете, что происходит:

    • wp-admin/post.php — особенно та часть, которая обрабатывает действия
    • wp-admin/includes/post.php — особенно edit_post() иwp_write_post()
    • wp-admin/edit-form-advanced.php — полезно понимать связь между пользовательским интерфейсом и действиями, которые он запускает

    Поскольку вы также хотите разрешить загрузку, вам также необходимо узнать о медиа-стороне вещей:

    • wp-admin/includes/media.php — особенно media_handle_upload() иmedia_upload_form_handler() media_upload_form()
    • wp-admin/includes/file.php — убедитесь, что вы понимаетеwp_handle_upload()
    • wp-admin/includes/image.php — по крайней мере хорошо, чтобы посмотреть, что происходит с вашими вложениями при загрузке, и вам, конечно, придется включить это

    Как это сделать

    Лучше всего начать с копирования wp-admin/post.php и удаления всего, кроме того, что вам нужно для сохранения поста. Постарайтесь избавиться от как можно большего количества ненужных зависимостей, но оставьте вызовы функций, участвующие в сохранении поста.

    Помните, что чем больше вы будете использовать основные функции WP и чем более высокого уровня они будут, тем больше вы будете совместимы между разными версиями и тем больше проверок работоспособности вы получите бесплатно.

    Затем взгляните на wp-admin/edit-form-advanced.php его зависимости, чтобы определить, что вам может понадобиться для вашего пользовательского интерфейса и как вы можете обеспечить это, используя как можно больше кода WP. В то же время взгляните на comment_form() функцию для вдохновения при реализации формы интерфейса.

    Частью всего этого будет понимание механизма nonce (который на самом деле не так уж и сложен).

    Сначала убедитесь, что ваши сообщения работают… то есть ваш пользователь может создавать и, возможно, редактировать/удалять свои сообщения, и что вы правильно храните все данные.

    Затем добавьте свой пользовательский интерфейс с метаданными и сохраните его. При этом старайтесь использовать крючки. Например, если вы используете функции WP для хранения сообщений в БД, save_post будет запущен хук. Используйте его для хранения ваших метаданных. Это связано с тем, что чем больше вы будете заниматься такими вещами, тем легче будет приспособиться к изменениям в WP в будущем или даже изменить то, как вы делаете что-то, себя. Использование хуков неявно модулирует вашу функциональность.

    После того, как все это работает, реализуйте форму загрузки и скрипт обработки загрузки. Я считаю, что мультимедийные функции требуют немного, чтобы действительно освоиться. Это связано с тем, что многие из них запутались в управляемой AJAX панели управления Media Thickbox. Однако, как только вы поняли, как отделить урожай от дерьма, вам нужно будет сделать всего несколько звонков, чтобы запустить загрузку мультимедиа.

    Используйте функцию Bainternet, представленную в его ответе на этот вопрос.

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

    Пример формы

    Наконец, вот пример формы публикации и загрузки, которую я написал для плагина Photo Contest, который я собираюсь выпустить в ближайшее время, надеюсь. Однако плагин не использует обычные вложения, а создает для них собственный тип сообщения, похожий на вложение, так что это немного сложнее, чем ваш случай. И он также использует механизмы идентификации комментаторов на основе файлов cookie, поскольку в конечном итоге он открыт для пользователей, которые не вошли в систему. Все это вам, вероятно, не понадобится, однако, в любом случае, может быть полезно взглянуть на это для вдохновения (за исключением того, что вы d хочу повторно использовать media_upload_form(), вероятно).

    • 0
    • Спасибо за ваш ответ wyrfel. Я действительно не хочу, чтобы пользователи получали доступ к исходному интерфейсу панели инструментов. Вместо этого я хотел бы, чтобы они составляли сообщение на странице веб-сайта. Я предполагаю, что два моих оставшихся вопроса: — Где основная часть работы заключается в повторной реализации функциональности почты? — Где я могу узнать о настройке/стилизации экрана сообщений для пользователей?

      • 0
    • Спасибо за длинное обновление wyrfel. Это было чрезвычайно полезно! Похоже, мне есть чему поучиться 🙂

      • 0

Оставить ответ

You must login to add an answer.