وبلاگ شخصی علی زمانی

پیرامون مطالعات و دلبستگی های شخصی

وبلاگ شخصی علی زمانی

پیرامون مطالعات و دلبستگی های شخصی

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

پربیننده ترین مطالب
چند روز پیش ، توی یکی از پروژه ها نیاز داشتم که توی صفحه آرشیو پست تایپ ها ، که با استفاده از خود وردپرس ، یه فایل جدا بهش تعلق میگیره کاری کنم که توی کوری اصلی پارامتر
posts_per_page
رو تغییر بدم .ولی خب ، یه سری مشکلاتی وجود داره ، برای انجام این کار پیشنهاد میشه که موقعی که کاستوم کوری نوشته میشه ، توی آرگومان اصلی ، متغییر بالا رو دستی بهش عدد مورد نیاز رو وارد کنیم ، ولی توی صفحاتی مثل آرشیو مشکل پیش می یاد ، برای همین باید از فیلتر ها استفاده میکردم 

که البته فیلتر زیر رو توی فانشن قالب اصلی قرار دادم : 


function custom_get_posts( $query ) {

  if(  is_post_type_archive('post_type_name') && !is_admin()) { 
    $query->query_vars['posts_per_page'] = '1';
  }

    return $query;
}
add_filter( 'pre_get_posts', 'custom_get_posts' );

الان من یه فیلتر توی کوری اصلی سیستم فرار دادم ، اگه دقت کنید ، یه تابع هست به نام  custom_get_posts ، توی این تابع یه شرط گزاشتم ، که اگر نوع پست تایپ برابر بود با  post_type_name و همینطور توی ادمین نبودیم ، این متغیر رو اعمال کنه ، اون دستور && یعنی هر دو شرط وجود داشته باشن .

یه سوال که پیش می یاد ، این هست که چرا دستور 

 !is_admin()
رو قرار دادم ، خب ، برای این هست که این فیلتر که ما قرار دادیم توی کل سیستم اعمال میشه ، و اگه دستور بالا رو وارد نکنید ، موقعی که توی محیط مدیریت می خواید آخرین پست های ، پست تایپ مورد نظر رو چک کنید می بینید که فقط 1 پست نشون داده میشه ، پس ما شرط بالا رو گزاشتیم که دیگه این فیلتر توی محیط ادمین نباشه .

add_filter( 'pre_get_posts', 'custom_get_posts' );

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

ولی این دستوره یه مشکل عجیبی داشت ، برای مثال من توی صفحه آرشیو ، که قرار هست این فیلتر اعمال بشه ، چیزی حدود 5 تا ، کاستوم کوری داشتم ، که این شرط به همشون اعمال میشد :))
چاره چی بود ؟

اگه دقت کرده باشید ، گفتم که این شرط به سیستم می گه موقعی که می خوای این صفحه رو بساز ، اگه شرط ها بر قرار بود ، اونوقت این تغییر رو اعمال کن .
پس ما می تونیم یه کاری کنیم  ، فقط کافی هست که این رو به سیستم بگیم  ،که این شرط رو اعمال کنه ، ولی توی صفحه ای که نیاز داریم ، دیگه این فیلتر رو حذف میکنیم . امیدوارم متوجه منظورم شده باشید .
ببینید ، وردپرس توی صفحه هایی مثلا آرشیو ، خودش کوری میسازه ، یعنی متغییر هایی که پیشفرض خودش هست رو اعمال میکنه ، ما ابتدا می آیم ، اون متغییر پیش فرض رو دست کاری میکنم ، بعدش می تونیم متغییر هایی که نیاز داریم رو اعمال کنیم برای همین ، 
بالای صفحه آرشیو دستور زیر رو اعمال میکنیم : 


remove_filter( 'pre_get_posts', 'custom_get_posts' );
الان با این کار ، 5 تا کوری که توی صفحه بود ، بدون مشکل کار میکنن و همینطور دیگه پارامتر های پیشفرض این کوری ها رو دستکاری نمیکنن.
سعی کردم ساده بگمش ، اگه مشکلی بود ، خوشحال میشم بپرسید :)
۹۲/۰۵/۱۴
علی زمانی

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی