soma

سوال درباره آژاکس در وردپرس

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

ارسال شده در (ویرایش شده)

سلام 

سوال من درباره تغییر کد زیر هست که در پنل ادمین وردپرس در پست تایپ به صورت ajax هست و من میخوام این دستور رو بتونم به صورت امن در بخش forentend  قالبم اجرا کنم 

$url = wp_nonce_url(admin_url('admin-ajax.php?action=my_post_meta&posttypename_id=' . $post->ID), 'my_post_meta');
echo 'my html cod ';

وقتی این لینک اعمال میشه در پنل دایرکت ادمین ، اون پست تایپ دارای یک چک باکس هست که با این لینک کنترل میشه و on  و off میشه  ( در بخش لیست نوشته ها ) 

این کد کاملا در بخش forentend هم کار میکنه ولی فکر نمیکنم خیلی از لحاظ امنیت به این شکل استفاده اش درست باشه چون در سورکد کاملا admin-ajax.php و مسیر ادمین مشخص هست . 

همچنین میخوام که این دستور فقط برای رول خاصی اجرا بشه.

چطور باید تغییرش بدم این کد رو که هم امن باشه و هم به درستی عملیات اجرا بشه 

لطفا با نمونه کد راهنمایی کنید 

ممنون

ویرایش شده در توسط soma
0

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


لینک به پست

سلام

این نوع استفاده چه در بخش مدیریت چه در بخش کاربری بطور کلی معقول به نظر نمیرسه.

شما متغییرها رو نباید در آدرس پاس بدید. بهتر اینه که در جاوااسکریپت اونها رو بگیرید و بعد در ایجاکس اونها رو مقداردهی و پاس بدید.

نمونه کدش در کدکس وردپرس وجود داره.

0

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


لینک به پست
در در 3/15/2019 at 11:24، Morteza گفته است :

سلام

این نوع استفاده چه در بخش مدیریت چه در بخش کاربری بطور کلی معقول به نظر نمیرسه.

شما متغییرها رو نباید در آدرس پاس بدید. بهتر اینه که در جاوااسکریپت اونها رو بگیرید و بعد در ایجاکس اونها رو مقداردهی و پاس بدید.

نمونه کدش در کدکس وردپرس وجود داره.

سلام و ممنون از پاسختون @Morteza

1- علت اینکه این کار معقول به نظر نمیرسه چیه ؟ اگر امکانش هست کمی توضیح بدید ممنون میشم .

2- امکان داره لینک یا عنوان مشخصی که بتونم سریعتر به پاسخم برسم رو معرفی کنید ، چون دقیقا نمیدونم چه چیزی رو در کدکس سرچ کنم تا به نتیجه دلخواهم برسم ، با جستجوی ajax در کدکس و مطالعه نتایج به دست اومده بیشتر گیج شدم 

3- کاری که من تا الان انجام دادم به شرح زیره :

از طریق جاوااسکریپت هم کدها رو گذاشتم ولی دستور رو اجرا نمیکنه و فقط مقدار رو میگیره و نمایش میده

نمونه کدهام بهصورت زیر هست : البته لازم به توضیح است که من این کدها رو از یک بخش دیگه که کارکرد مشابه این مورد داشته برداشتم و برای این بخش دلخواهم میخواستم اضافه کنم که تمامی بخش های این کد ها کار میکنه ( یعنی اون متای خاص فعال شده یا نه را نمایش میده) ولی دستور فعال کردن و غیر فعال کردن متا رو اجرا نمیکنه 

در بخش php: 

<?php
$my_var = get_post_meta($post->ID, 'posttype_is_my_var_meta', true);
                       if ( $my_var == 'on' ) {
                            $posttype_is_my_var = 'فعال است';
                            $icon_class = 'icon-star3';
                            $icon_color = 'green';
                        } else {
                            $posttype_is_my_var = 'فعال نیست';
                            $icon_class = 'icon-star-o';
                            $icon_color = 'gray';
                        }
						$my_var_options = array(
                        'on' =>  'فعال',
                        'off' => 'غیر فعال',
                         );
						$posttype_is_my_var = isset($my_var_options[$posttype_is_my_var]) ? $my_var_options[$posttype_is_my_var] : $posttype_is_my_var;

                    ?>
                        <div class="posttype-my-var">
						  <a class="posttype-my-var-update" 
						  data-toggle="tooltip" 
						  data-placement="top" 
						  title="<?php echo esc_html($posttype_is_my_var); ?>" 
						  href="javascript:void(0);" 
						  id="posttype-my_var-<?php echo absint(get_the_ID()); ?>" 
						  data-id="<?php echo absint(get_the_ID()); ?>">  
						  <i class="<?php echo esc_html($icon_class); ?>" 
						  style="color:<?php echo esc_html($icon_color); ?>"></i>
						  </a></div>
						   <script type="text/javascript">
                            jQuery(document).ready(function () {
                                if (jQuery('[data-toggle="tooltip"]').length != '') {
                                    jQuery('[data-toggle="tooltip"]').tooltip();
                                }
                            });
                           </script>
						   
						   
<?php 
 public function update_posttype_my_var_callback() {

            global $current_user;
            $user_id = company_id_form_user_id($current_user->ID);

            $posttype_id = isset($_POST['posttype_id']) ? $_POST['posttype_id'] : '';
            $posttype_is_my_var = isset($_POST['posttype_is_my_var']) ? $_POST['posttype_is_my_var'] : '';

            $response = array( 'msg' =>'متن اطلاعیه', 'type' => 'error', 'label' => $posttype_is_my_var );
            if ( $posttype_id ) {
                $user_id = get_post_meta($posttype_id, 'posttype_user', true);
                if ( is_user_logged_in() && $user_id == $user_id ) {
                    $posttype_is_my_var = get_post_meta($posttype_id, 'posttype_is_my_var', true);
                    if ( $posttype_is_my_var == 'on' ) {
						update_post_meta($posttype_id, "posttype_is_my_var", 'off');

                        $response = array( 'msg' => 'متن اطلاعیه', 'type' => 'success', 'label' => 'فعال نیست', 'icon' => 'icon-eye-blocked', 'value' => 'off' );
                    } else {
                        update_post_meta($posttype_id, 'posttype_is_my_var', 'on');
                        $response = array( 'msg' => 'متن اطلاعیه', 'type' => 'success', 'label' => 'فعال است', 'icon' => 'icon-eye2', 'value' => 'on' );
                    }
                }
            }
            echo json_encode($response);
            die;
        }

در فایل جاوا اسکریپت هم این کدها رو اضافه کردم 

jQuery(document).on('click', '.posttype-my-var .posttype-my-var-update', function () {
    "use strict";
    var thisObj = jQuery(this);
    var posttype_id = jQuery(this).attr('data-id');
    var posttype_is_my-var = jQuery(this).attr('title');
    jQuery.ajax({
        type: "POST",
        url: globals.ajax_url,
        data: 'action=posttype_is_my_var&posttype_id=' + posttype_id + '&posttype_is_my_var=' + posttype_is_my-var,
        dataType: 'json',
        success: function (response) {
            show_response(response);
            if (jQuery('[data-toggle="tooltip"]').length != '') {
                jQuery('.posttype-my-var .posttype-my-var-update').tooltip('hide');
            }
            if (typeof response.icon !== 'undefined' && response.icon != '') {
                var icon_class = thisObj.parent().find('i').attr('class');
                thisObj.parent().find('i').removeClass(icon_class).addClass(response.icon);
            }
            if (typeof response.label !== 'undefined' && response.label != '') {
                thisObj.attr('data-original-title', response.label);
            }
            if (typeof response.value !== 'undefined' && response.value === 'on') {
                thisObj.parent().find('i').css("color", "green");
            } else {
                thisObj.parent().find('i').css("color", "red");
            }
        }
    });
});

دقیقا در بخش data  باید همون عملی که از طریق admin-ajax.php?action کد زیر اعمال میشه ، اجرا بشه که نمیشه ، کد زیر دقیقا  در جدول پست های اون پست تایپ مشخصم ، جلوی هر نوشته نمایش داده میشه و علاوه بر اینکه وضعیت فعال بودن یا فعال نبودن  اون متای مشخص رو نشون میده ، با کلیک روش میشه اون متای خاص رو کنترل کرد و فعال و غیر فعال کرد ، وقتی همین کد رو در پروفایل کاربر برای نمایش لیست پستهایی که ارسال کرده میگذارم دقیقا اعمال میشه  ولی خب باگ بزرگی دارهکه همون ابتدا هم گفتم 

$my_var = get_post_meta($post->ID, 'posttype_is_my_var', true);
                   $url = wp_nonce_url(admin_url('admin-ajax.php?action=posttype_is_my_var&posttype_id=' . $post->ID), 'posttype_is_my_var');
                    echo '<a href="' . esc_url($url) . '">';
                    if ( $my_var == 'on' ) {
                        echo '<i data-toggle="tooltip" data-placement="bottom" title="' . 'فعال است' . '" class="dashicons dashicons-star-filled"></i>';
                    } else {
                        echo '<i data-toggle="tooltip" data-placement="bottom" title="' . 'فهال نیست' . '" class="dashicons dashicons-star-empty"></i>';
                    }
                    echo '</a>';

 

0

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


لینک به پست

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

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

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

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


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

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

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


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

  • مطالب مشابه

    • توسط ccoder
      سلام
      طبق تصویر زیر، آیا افزونه ای وجود داره که بشه جستجو رو ajax کرد؟
      خیلی از افزونه ها ajax می کنند ولی بدرد بخور نیست. منظورم از ajax اینه که مثل سایت (متاسفانه فیلتر شده ای نتورک) وقتی کلمه ای رو سرچ می کنید، سریع نشون بده.
      آدرس سایتشم میزنم که با فیلتر شکن برید و از نزدیک ببینید:
      http://academy.anetwork.ir
      از منوی بالا > دیکشنری رو بزنید
      :::: اگر افزونه وردپرس هم نبود و کدی برای صفحه single داشتید هم معرفی کنید ::::

    • توسط reza_yki
      سلام من نیاز به کسی دارم که بتونه یه صفحه ساز (page builder) برای قالب وردپرس از پایه طراحی کنه
      و کدها رو به صورت فیلم برام توضیح بده ( فیلم آموزشی ) و داخلش امکانات زیر قرار داده بشه:
      افزودن نامحدود لایه یا همون row و کاملا شبیه به کاری که کامپوزر میکنه با قابلیلت درگ کردن لایه ها، ویرایش، حذف و احتمالا امکان کپی و پیست از یه لایه برای استفاده در لایه دیگه. و کار بعدی اینه که یکی دوتا براش شورتکد (element) بزنید مثلا یکی این باشه که بشه ادیتور اضافه کنید بهش (ویرایشگر پیشفرض وردپرس).  یکی دیگشم نمایش یک دسته خاص با تنظیماتی مانند تعداد پست، رنگ عنوان و دسته مورد نظر برای فهمیدن نحوه ارتباط و غیره تا با توجه به اون من شورتکد های خودمو طراحی کنم توضیح کامل در انتها داده میشه. می خوام کاربر انتخاب کنه که از ویرایشگر خود وردپرس استفاده کنه یا از صفحه ساز ما همچنین امکان استفاده در page و post رو هم داشته باشه. امکان دیگه این که کاربر بتونه برای خودش تو این لایه ها یه widget area اضافه کنه تا از ابزارک ها پیشفرض یا غیره هم استفاده کنه.  
      منظور از شورت کد اینه که طرف بعد از ایجاد row المنت هایی که من طراحی کردم رو داخلش قرار بده می خوام این قسمت طوری آموزش داده بشه که بتونم المنت های خودمو براش توسعه بدم
      توضیح: دلیل این کار اینه که من می تونم با ویژال کامپوزر المنت های اختصاصی ام رو بهش اضافه کنم ولی سنگینی این افزونه باعث شده که منصرف بشم از این کار.
       
      نکته: نمی خوام به صورت پلاگین باشه باید مستقیم به قالب وصل بشه و همچنین باید کاملا سبک باشه
      نکته 2: طوری طراحی بشه که اگر کاربر بعدا قالب رو حذف کرد محتوا از بین نره یا مخدوش نشون داده نشه
      نکته 3: ظاهر کار مهم نیست خودم اون قسمت رو درست میکنم

      اگه پیشنهادی دارید خوشحال میشم بشنوم

      ممنون
    • توسط arianemun
      سلام دوستان عزیز ، چطور میشه cart ajax ایجاد کرد برای ووکامرس ؟ من میخوام یه قسمتی از سایتم یک جایی درست کنم که کاربر هروقت محصولی اضافه کرن به سبد خرید به صورت ajax تغییر سبد خرید تغییر کنه محصولاتی که در سبد خریدش هست و جمع قیمت اون ها رو به کاربر نمایش بده .
       
      مرسی
    • توسط jistili1
      سلام دوستان.من از افزونه ajax search lite که برای جستجوی پیشرفته در سایت هست توی ومپ سرور استفاده میکنم.ولی نمیدونم چرا کار نمیکنه.عکسش رو براتون پیوست میکنم.طوری که دیدم باید هر متنی رو که میزنی به صورت live بگرده و نتایج رو زیرش لیست کنه.ولی اصلا اینکارو نمیکنه.ممنون میشم راهنمائیم کنید مشکلش رو حل کنم.
      الان توی عکس پیوست شده دقت کنید ، یه مطلب دارم به اسم interstellar.بعد وقتی توی نوار جستجو میزنم هیچ واکنشی نشون نمیده.تا جائی که میدونم حتی اگه چیزی هم پیدا نکرد باید بزنه که مطلبی پیدا نشد.

    • توسط jistili1
      سلام دوستان.من میخوام افزونه ajax search lite رو که برای جستجوی پیشرفته در سایت هستش ، یکمی از لحاظ ظاهری ویرایش کنم.مثلا فونت متنی که برای جستجو کاربر وارد میکنه رو بزرگتر کنم یا طول کادر وارد کردن متن جستجو رو بزرگ و کوچیک کنم.ممنون میشم راهنمائیم کنید چطوری این کار رو بکنم.