Advertisement
  1. Code
  2. Creative Coding

Проводка через интерфейс: редактирование и удаление

Scroll to top
Read Time: 10 min

() translation by (you can also view the original English article)

Сегодня мы продолжим работу над нашей мини-серией для вставки постов через интерфейс, но в этой части мы рассмотрим исключительно то, как редактировать и удалять посты через интерфейс. Мы расскажем, как отображать все наши сообщения, редактировать и удалять их.  Итак, давайте подготовимся и начнем!


Вступление

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

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

Так что откройте ваш любимый текстовый редактор и начнем!


Шаг 1 Отображение наших сообщений

Мы начнем с более эффективного отображения всех наших сообщений, это позволит нам лучше управлять своими сообщениями и позволит нам выполнять действия с каждым сообщением.  Поскольку мы используем тему для ее разработки, мы создадим шаблон страницы с именем template-view-posts.php.  Кроме того, мы создадим новую страницу с помощью страниц WordPress Dashboard Pages -> Add New -> Page Attributes, чтобы назначить шаблон этой странице.

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

1
2
3
<table>
4
5
  <tr>
6
		<th>Post Title</th>
7
		<th>Post Excerpt</th>
8
		<th>Post Status</th>
9
		<th>Actions</th>
10
	</tr>
11
12
	<tr>
13
		<td></td>
14
		<td></td>
15
		<td></td>
16
		<td></td>
17
	</tr>
18
19
</table>

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

1
2
3
<?php
4
$query = new WP_Query( array(
5
	'post_type' => 'post',
6
	'posts_per_page' => '-1',
7
	'post_status' => array(
8
		'publish',
9
		'pending',
10
		'draft',
11
		'private',
12
		'trash'
13
	)
14
) );
15
?>

Это наш объект запроса со всеми нашими пользовательскими параметрами, которые мы установили.  Вы можете прочитать обо всех различных параметрах, которые мы можем установить из Кодекса WordPress.  Далее мы запустим наш цикл WordPress сразу после заголовков таблицы, например так:

1
2
3
<?php
4
if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
5
6
<tr>
7
	<td></td>
8
	<td></td>
9
	<td></td>
10
	<td></td>
11
</tr>
12
13
<?php endwhile; endif; ?>

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

1
2
3
<tr>
4
	<td><?php echo get_the_title(); ?></td>
5
	<td><?php the_excerpt(); ?></td>
6
	<td><?php echo get_post_status( get_the_ID() ) ?></td>
7
	<td><a href="#">Edit</a> <a href="#">Delete</a></td>
8
</tr>

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


Шаг 2 Редактирование наших сообщений

Гениально, мы добиваемся хорошего прогресса.  Мы настроили нашу тему для просмотра всех наших сообщений через интерфейс.  Далее мы собираемся редактировать пост.  Мы начнем с создания другого шаблона страницы с именем template-edit-posts.php.  Кроме того, мы создадим новую страницу с помощью страниц WordPress Dashboard Pages -> Add New -> Page Attributes и назначим шаблон этой странице.

Прежде чем мы начнем редактировать этот шаблон, давайте вернемся к нашему файлу template-view-posts.php и убедимся, что мы передаем идентификатор публикации на URL-адрес, по которому мы получим идентификатор со страницы редактирования.  Мы делаем это с помощью функции WordPress: add_query_arg.  Мы вставим следующий код прямо перед нашей ссылкой Изменить:

1
2
3
<?php
4
$edit_post = add_query_arg( 'post', get_the_ID(), get_permalink( 61 + $_POST['_wp_http_referer'] ) );
5
?>

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

Наконец, мы выведем это в нашу ссылку для редактирования, сделав нашу ссылку для редактирования следующим образом:

1
2
3
<a href="<?php echo $edit_post; ?>">Edit</a>

Теперь, когда мы установили его, когда пользователь нажимает кнопку «Изменить», он переходит к нашему шаблону редактирования с идентификатором поста.  Мы вернемся к нашему файлу template-edit-posts.php и начнем вставлять наш код.

Мы скопируем нашу форму из нашего шаблона-insert-posts.php и вставим ее в наш шаблон редактирования.  Мы копируем следующий код в наш шаблон редактирования и удаляем все значения из наших входных данных и текстовой области, делая нашу форму следующим образом:

1
2
3
<form action="" id="primaryPostForm" method="POST">
4
5
	<fieldset>
6
7
		<label for="postTitle"><?php _e( 'Post\'s Title:', 'framework' ); ?></label>
8
9
		<input type="text" name="postTitle" id="postTitle" value="" class="required" />
10
11
	</fieldset>
12
13
	<?php if ( $postTitleError != '' ) { ?>
14
		<span class="error"><?php echo $postTitleError; ?></span>
15
		<div class="clearfix"></div>
16
	<?php } ?>
17
18
	<fieldset>
19
				
20
		<label for="postContent"><?php _e( 'Post\'s Content:', 'framework' ); ?></label>
21
22
		<textarea name="postContent" id="postContent" rows="8" cols="30"></textarea>
23
24
	</fieldset>
25
26
	<fieldset>
27
		
28
		<?php wp_nonce_field( 'post_nonce', 'post_nonce_field' ); ?>
29
30
		<input type="hidden" name="submitted" id="submitted" value="true" />
31
		<button type="submit"><?php _e( 'Add Post', 'framework' ); ?></button>
32
33
	</fieldset>
34
35
</form>

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

1
2
3
<?php $query = new WP_Query( array( 'post_type' => 'post', 'posts_per_page' => '-1' ) ); ?>
4
5
<?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
6
7
<?php
8
9
	/*

10
		We will be inserting all of our information inside of here

11
	*/
12
13
?>
14
15
<?php endwhile; endif; ?>
16
<?php wp_reset_query(); ?>

Чтобы цикл WordPress гарантировал, что мы только извлекаем информацию о конкретном сообщении, мы вставим следующий код, который гарантирует, что мы получим правильный идентификатор сообщения внутри нашего цикла:

1
2
3
if ( isset( $_GET['post'] ) ) {
4
	
5
	if ( $_GET['post'] == $post->ID )
6
	{
7
		$current_post = $post->ID;
8
	}
9
}

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

1
2
3
$title = get_the_title();
4
$content = get_the_content();

Наш финальный код должен выглядеть так:

1
2
3
if ( isset( $_GET['post'] ) ) {
4
	
5
	if ( $_GET['post'] == $post->ID )
6
	{
7
		$current_post = $post->ID;
8
		$title = get_the_title();
9
		$content = get_the_content();
10
	}
11
}

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

1
2
3
<form action="" id="primaryPostForm" method="POST">
4
5
	<fieldset>
6
7
		<label for="postTitle"><?php _e( 'Post\'s Title:', 'framework' ); ?></label>
8
9
		<input type="text" name="postTitle" id="postTitle" value="<?php echo $title; ?>" class="required" />
10
11
	</fieldset>
12
13
	<?php if ( $postTitleError != '' ) { ?>
14
		<span class="error"><?php echo $postTitleError; ?></span>
15
		<div class="clearfix"></div>
16
	<?php } ?>
17
18
	<fieldset>
19
				
20
		<label for="postContent"><?php _e( 'Post\'s Content:', 'framework' ); ?></label>
21
22
		<textarea name="postContent" id="postContent" rows="8" cols="30"><?php echo $content; ?></textarea>
23
24
	</fieldset>
25
26
	<fieldset>
27
		
28
		<?php wp_nonce_field( 'post_nonce', 'post_nonce_field' ); ?>
29
30
		<input type="hidden" name="submitted" id="submitted" value="true" />
31
		<button type="submit"><?php _e( 'Update Post', 'framework'); ?></button>
32
33
	</fieldset>
34
35
</form>

Как вы можете видеть из кода, мы присвоили наше входное значение Post Title для вывода переменной title, а внутри нашей текстовой области мы вывели нашу переменную содержимого, но, как вы могли заметить, когда мы нажимаем Update Post, ничего не происходит, это потому что мы еще не справились с этим, и мы будем делать это сейчас.

Нам нужно будет вернуться к нашему файлу template-insert-posts.php, и мы собираемся скопировать проверку формы PHP в наш Редактировать шаблон.  Теперь, когда мы скопировали проверку формы, мы внесем некоторые изменения и вставим некоторый код.  Нам нужно извлечь переменную current_post в нашей проверке формы, и мы делаем это, устанавливая глобальную переменную, и вставляем это выше нашей проверки:

1
2
3
global $current_post;

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

1
2
3
$post_information = array(
4
	'ID' => $current_post,
5
	'post_title' =>  wp_strip_all_tags( $_POST['postTitle'] ),
6
	'post_content' => $_POST['postContent'],
7
	'post_type' => 'post',
8
	'post_status' => 'pending'
9
);

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

1
2
3
$post_id = wp_update_post( $post_information );

И это все для редактирования постов через интерфейс. Наконец, для этой части мини-серии мы рассмотрим, как удалять сообщения. Наконец, для этой части мини-серии мы рассмотрим, как удалять сообщения.


Шаг 3 Удаление наших сообщений

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

Мы передадим эту функцию нашей ссылке удаления вместе с передачей идентификатора сообщения следующим образом:

1
2
3
<a href="<?php echo get_delete_post_link( get_the_ID() ); ?>">/Delete</a>

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

1
2
3
<a onclick="return confirm('Are you sure you wish to delete post: <?php echo get_the_title() ?>?')" href="<?php echo get_delete_post_link( get_the_ID() ); ?>">Delete</a>

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

1
2
3
<?php if( !(get_post_status() == 'trash') ) : ?>
4
5
	<a onclick="return confirm('Are you sure you wish to delete post: <?php echo get_the_title() ?>?')"href="<?php echo get_delete_post_link( get_the_ID() ); ?>">Delete</a>
6
7
<?php endif; ?>

И это все! Вы можете отправлять сообщения в корзину.  На случай, если вам будет любопытен альтернативный метод удаления сообщений, я объясню это очень кратко.

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


Заключение

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

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

Я хотел бы сказать ОГРОМНОЕ спасибо за то, что потратили время на чтение моего урока, надеюсь, это помогло.  Пожалуйста, не стесняйтесь оставлять комментарии, и я сделаю все возможное, чтобы помочь и ответить на них, если нет, вы всегда можете связаться со мной напрямую через мой сайт: www.VinnySingh.co или Twitter @VinnySinghUK

Оставайтесь с нами для части 3!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.