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 الخاصة بنا -> إضافة جديد -> سمات الصفحة كتعريف القالب لهذه الصفحة. 

لدينا الآن نموذج صفحة و صفحة تم إنشاؤها في موضوع 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>

والآن بعد أن أصبح لدينا طاولتنا ، يمكننا البدء في ملء صفوف جدولنا بمعلومات تتعلق بمشاركاتنا.  سنبدأ أولاً بإنشاء حلقة ووردبريس مخصصة ، لضمان حصولنا على جميع المشاركات وجميع حالات النشر ، لأننا نريد أن نكون قادرين على رؤية المشاركات المعلقة ، أو المسودات ، أو المنشورة ، أو حتى المرسلة إلى المهملات.   نقوم بذلك عن طريق إدخال الجزء التالي من التعليمات البرمجية: 

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 بعد عناوين جدولنا مباشرة ، على النحو التالي: 

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; ?>

متألق!  لدينا مجموعة جداول  ، و لدينا مجموعة حلقة وورد.   والآن نحتاج فقط إلى إدخال معلوماتنا المتعلقة بعناوين الجداول الخاصة بنا.   استبدل خلايا الجدول الفارغة بالرمز التالي: 

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 الخاصة بنا -> إضافة جديد -> سمات الصفحة وتعيين القالب إلى هذه الصفحة. 

قبل أن نبدأ في تحرير هذا القالب ، دعنا نرجع مرة أخرى إلى ملف 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 الخاص بنا ونبدأ في إدخال الكود الخاص بنا. 

سنقوم بنسخ النموذج الخاص بنا من template-insert-posts.php الخاص بنا وإدخاله في "قالب التعديل" الخاص بنا.   نحن نقوم بنسخ التعليمة البرمجية التالية إلى قالب التعديل الخاص بنا ، وإزالة كافة القيم من مدخلاتنا و textarea ، مما يجعل النموذج الخاص بنا كما يلي: 

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>

كما ترون من الشفرة ، فقد خصصنا قيمة مدخلاتنا في عنوان البريد لإخراج متغير العنوان ، وداخل الجزء الخاص بنا قد قمنا بإخراج متغير المحتوى الخاص بنا ، ولكن كما لاحظت أنه عند النقر فوق تحديث نشر لا يحدث شيء ، لأننا لم نتعامل مع هذا بعد ، وسنفعل هذا الآن. 

سنحتاج إلى الرجوع إلى ملف template-insert-posts.php الخاص بنا وسوف نقوم بنسخ نموذج التحقق من صحة PHP الخاص بنا إلى نموذج التعديل الخاص بنا.   الآن بعد أن قمنا بنسخ المصادقة على النموذج ، سنقوم بإجراء بعض التغييرات وإدخال بعض التعليمات البرمجية.  نحتاج إلى استرداد متغيرcurrent_post في نموذج التحقق من الصحة ، ونقوم بذلك عن طريق تعيين متغير عام ، ونحن نضيف هذا أعلاه إلى التحقق من صحتنا: 

1
2
3
global $current_post;

بعد ذلك ، سنجري تعديلًا على مصفوفة post_information الخاصة بنا .  أثناء قيامنا بتحديث المنشور الخاص بنا ، نحتاج إلى التأكد من أنه سيقوم بتحديث النشر الصحيح وليس كل المشاركات ، نقوم بذلك عن طريق إدخال معلمة معرف في مصفوفة 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 مع إضافة معلمة للحذف والتحقق مما إذا كانت قيمة هذه المعلمة صحيحة ، وإذا كانت صحيحة ، فمرر الدالة wp_trash_post إلى الارتباط.  هذا بسيط للغاية وفعال للغاية ، ولكن بالنسبة لحالنا الحالي ، يعمل  get_delete_post_link بشكل جيد للغاية.


استنتاج 

هذا الجزء 2 كامل!   يمكننا الآن إدراج المشاركات وتعديل وحذف المشاركات عبر الواجهة الأمامية.   لقد قمنا بتغطية الكثير من المحتوى حتى الآن ، وفي الجزء التالي سنحفر قليلاً. 

 في الجزء التالي ، سنلقي نظرة على الحقول المخصصة والمزيد. 

أود أن أقول شكراً جزيلاً لكم على قضاء الوقت في قراءة البرنامج التعليمي الخاص بي ، وآمل أن يكون ذلك قد ساعدني.  لا تتردد في ترك التعليقات وسأبذل قصارى جهدي للمساعدة والإجابة عليها ، إن لم يكن يمكنك دائما الاتصال بي مباشرة من خلال موقع الويب الخاص بي: www.VinnySingh.co أو تويتر @ VinnySinghUK 

ترقبوا الجزء الثالث! 

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.