cancer

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

8 پست در این موضوع قرار دارد

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

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

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

0

به اشتراک گذاری این پست


لینک به پست

سلام و درود

 

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

1

به اشتراک گذاری این پست


لینک به پست
در 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); 
}

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

0

به اشتراک گذاری این پست


لینک به پست

میخوای ایمیل بشه آیدی پست بهت یا همونجا هم کلیک شد نشون بده کارت راه میوفته؟

1

به اشتراک گذاری این پست


لینک به پست

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

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

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

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

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

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

0

به اشتراک گذاری این پست


لینک به پست

درود مجدد

 

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

 

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 ای که تعریف کردیم رو اجرا میکنه که توی تابع اون اکشن اومدیم آیدی رو ایمیل کردیم به ایمیل ادمین سایت.

 

موفق باشید

1

به اشتراک گذاری این پست


لینک به پست

با کمی تغییر این کد شما به نتیجه رسیدم

بازم ممنونم که وقت گذاشتین

0

به اشتراک گذاری این پست


لینک به پست
در 4 ساعت قبل، cancer گفته است :

با کمی تغییر این کد شما به نتیجه رسیدم

بازم ممنونم که وقت گذاشتین

خواهش میکنم.

موفق باشید

0

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری