رفتن به مطلب

افزودن ستون جدید به بخش مدیریت تمام پست ها (edit.php)


پست های پیشنهاد شده

سلام من قصد داشتم که یک ستون به لیست مدیریت تمام پست ها (لیستی که وقتی روی تمام نوشته ها کلیک می کنین ظاهر میشه) اضافه کنم که این کارو تونستم با کد زیر انجام بدم

function add_myColumn( $columns ) {
  return array_merge( $columns,
  array( 'my_column' => 'Get Post ID' ));
}
add_filter( 'manage_posts_columns' , 'add_myColumn' );

function display_column_content( $column, $post_id ) {
  if ($column == 'my_column'){
    echo '
    <form method="post">
      <input type="hidden" name="postID" value="'.$post_id.'" />
      <input type="submit" name="submit_getID" value="Get ID" class="button">
    </form>';
  }
}
add_action( 'manage_posts_custom_column' , 'display_column_content', 10, 2 );

که همینطور که در تصویر زیر هم میبینین ستون به درستی ایجاد شده

1.thumb.JPG.933cd8df72e9f328fd7ec3180a860647.JPG

من میخوام زمانی که روی هر دکمه کلیک شد، post_id اون پست رو دریافت کنم

برای همین من از یک <form> استفاده کردم که زمانی که sumbit میشه با کمک یه <input type="hidden"< تونستم id پست مربوطه رو از طریق کد زیر دریافت کنم که تا اینجا هم مشکلی نداشت

if(isset($_POST['postID'])){
    echo $_POST['postID'];
    // or do something with post id
}

اما مشکل کار اینجاست:

اون فرمی که من بالا گذاشتم که از طریق اون submit کنم برای تمام دکمه ها اعمال میشه به غیر از اولین دکمه لیست

یعنی زمانی که من Inspect Element میزنم html تمام دکمه ها به صورت زیر (فرم ایجاد شده):

2.JPG.59ba1f658837d5cff205631f5315f5c3.JPG

ولی فقط برای اولین دکمه لیست به صورت زیر (بدون فرم):

3.JPG.a3bd80868dec40bc885783540af42a8f.JPG

اگه کسی از دوستان بتونه راهنمایی کنه که چرا برای اولین دکمه فرم ایجاد نمیشه (یا حداقل بگه که توی اینترنت چی سرچ کنم) ممنون میشم

لینک به ارسال
در 1 دقیقه قبل، mehran-b گفته است :

سلام و درود

 

آیدی پست رو چطور نمایش میده؟

id پست از طریق هوک manage_posts_custom_column به تابع ارسال میشه (به عنوان پارامتر دوم):

function display_column_content( $column, $post_id ) {
  if ($column == 'my_column'){
    echo '
    <form method="post">
      <input type="hidden" name="postID" value="'.$post_id.'" />
      <input type="submit" name="submit_getID" value="Get ID" class="button">
    </form>';
  }
}
add_action( 'manage_posts_custom_column' , 'display_column_content', 10, 2 );

بعد با استفاده از:

 <input type="hidden" name="postID" value="'.$post_id.'" />

submit میشه و پس از reload صفحه توسط کد زیر از طریق $_POST دریافت میشه

if(isset($_POST['postID'])){
    echo $_POST['postID'];
    // or do something with post id
}

که بعدش در صورت ست شدن میشه به صورت

$_POST['postID']

برای مثال به عنوان آرگومان به تابع بفرستین

if(isset($_POST['postID'])){
	// for example, post id can be used to send an email
    $postObj = get_post($_POST['postID']);
	send_this_post_to_my_email($postObj); 
}

اگه منظورتون چیز دیگه ای بود بگین اگه بتونم توضیح بدم

لینک به ارسال

نه این که نوشتم ایمیل بشه یا echo کنه صرفا مثال بود

من فقط میخام که روی هر دکمه ای کلیک شد، id اون پست رو دریافت کنم و به عنوان ارگومان به یک تابع بفرستم، همین.

تا اینجا هم که الان نوشتم برای تمام دکمه ها کار میکنه، فقط مشکل دکمه اول لیسته

1.thumb.JPG.933cd8df72e9f328fd7ec3180a860647.JPG.4b45b61f44eb0790b74c8f2fe70e2078.JPG

اون دکمه هایی با رنگ سبز مشخص کردم کاملا درست کار میکنن
فقط همون دکمه ای که با رنگ قرمز علامت گذاشتم کار نمیکنه (چون نمیدونم چرا تگ form برای اون اضافه نمیشه)

اگرم راه دیگه میدونین که میشه با کلیک بر روی دکمه ها id پست مربوطه رو بتونم بفرستم به یک تابعی، ممنون میشم بگین

لینک به ارسال

درود مجدد

 

یک کد برای شما آماده کردم که انشاا... با مطالعه اون کد شیوه کار رو یاد میگیرید.

 

add_filter('manage_posts_columns', 'posts_column_id_add');
function posts_column_id_add($defaults) {
	
    $defaults['post_id'] = 'آیدی مطلب';
    return $defaults;
	
}

add_action('manage_posts_custom_column', 'posts_column_id_body', 10, 2);
function posts_column_id_body($column_name, $id){
	
    if($column_name === 'post_id') {
        echo '<button data-post-id="'.$id.'" class="button ajax-send-post-id">دریافت آیدی</button>';
    }
	
}

add_action('wp_ajax_send_post_id_by_mail', 'send_post_id_by_mail');

function send_post_id_by_mail() {
	
	$post_id = $_REQUEST['post_id'];
	
	$admin_email = get_option('admin_email');
	
	$send = wp_mail($admin_email, 'آیدی پست', $post_id);
	
	if($send === false)
		wp_send_json_error(array('message' => 'مشکلی در ارسال پیام رخ داده است'));
	else
		wp_send_json_success(array('message' => 'پیام با موفقیت ارسال شد'));
	
}

add_action('load-edit.php', function() {
	
	add_action('admin_print_footer_scripts', 'post_id_send_js');
	
});

function post_id_send_js() {
	
	?>
	<script>
	jQuery(".ajax-send-post-id").click(function(e) {
		
		e.preventDefault();
		
		var post_id = jQuery(this).attr('data-post-id');
		
		jQuery.ajax({
        type: 'GET',
        url: '<?php echo admin_url('admin-ajax.php'); ?>',
        data: {
            'action': 'send_post_id_by_mail',
			'post_id': post_id
        },
        dataType: 'json',
        success: function(result) {
			alert(result.data.message);
        }
		});
		
	});
	</script>
	<?php
	
}

خوب ابتدا که به فایل edit.php یه ستون اضافه کردیم به اسم آیدی مطلب سپس اومدیم برای هر پست توی اون ستون یه دکمه گذاشتیم با عنوان دریافت آیدی بعد با کلیک روی دریافت آیدی جی کوئری با استفاده از Ajax میاد یه اکشن Ajax ای که تعریف کردیم رو اجرا میکنه که توی تابع اون اکشن اومدیم آیدی رو ایمیل کردیم به ایمیل ادمین سایت.

 

موفق باشید

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...