توابع شرطی
مقدمه
توابع شرطی به منظور تغییر محتوای به نمایش درآمده و چگونگی نمایش آن در یک صفحه خاص بر اساس “شرایط” سازگار با آن صفحه، در پرونده های پوسته مورد استفاده قرار می گیرند. به عنوان مثال اگر بخواهید متنی بسیار کوتاه در بالای دسته ای از نوشته ها و تنها در صفحه اصلی وبلاگتان به نمایش دربیاید کافی است از تابع شرطی [[is_home()]] استفاده کنید. با استفاده از این تابع این کار به آسانی امکان پذیر می شود.
به ارتباط نزدیک بین این توابع و [[نظام سلسله مراتبی پوسته ها]] ی وردپرس دقت کنید.
شروط مربوط به …
همه توابع شرطی ابتدا وجود شرایط لازم را بررسی می کنند و سپس نتیجه بررسی خود را به دو شکل TRUE یا FALSE ارانه می کنند. شروطی که در صورت وجود آن ها نتیجه بررسی توابع مختلف TRUE خواهد بود، در زیر آمده است. علاوه بر این توابعی که قابلیت پذیرش پارامتر را دارند نیز مشخص شده اند.
صفحه اصلی
- is_home()
هنگامی که صفحه اصلی وبلاگ یه نمایش درمی آید. (نگارش ۲٫۱ وردپرس در این زمینه با نگارش های قبلی وردپرس متفاوت است و به گونه ای دیگر عمل می کند. برای اطلاعات بیشتر به صفحه اول ثابت مراجعه کنید.)
نکته: اگر صفحه اول ویلاگتان را صفحه ای ثابت انتخاب کنید (به مطلب زیر مراجعه شود) این تابع شامل “صفحه نوشته ها” می شود.
صفحه اول
- is_front_page()
هنگامی که [[صفحه]] اصلی سایت به نمایش درمی آید، چه این [[صفحه]] نوشته ها را نشان دهد و چه تنها یک صفحه باشد. نتیجه بررسی در صورتی TRUE خواهد بود که صفحه اصلی به نمایش در بیاید و ‘تنظیمان->خواندن->نمایش صفحه اول’ روی “آخرین نوشته های شما” یا “صفحه ثابت” تنطیم شده باشد و ارزش “صفحه اول” [[صفحه]] به نمایش در آمده فعلی باشد. نکته: این تابع در [[نگارش ۲٫۵]] به وردپرس اضافه شد.
صفحات مدیریت
- is_admin()
هنگامی که پیشخوان یا صفحات مدیریت به نمایش در می آیند.
صفحه تک نوشته
- is_single()
هنگامی که صفحه مربوط به یک نوشته به نمایش درمی آید.
- is_single('17')
هنگامی که نوشته شماره ۱۷ به صورت تک نوشته به نمایش درمی آید.
- is_single('Irish Stew')
هنگامی که نوشته ای با عنوان “Irsih Stew” به شکل تک نوشته نمایش درمی آید.
- is_single('beef-stew')
هنگامی که نوشته ای با نامک “beef-stew” به شکل تک نوشته به نمایش درمی آید.
- is_single(array(17,'beef-stew','Irish Stew'))
نتیجه درصورنی TRUE خواهد بود که تک نوشته به نمایش درآمده نوشته شماره ۱۷ باشد، “نامک نوشته” “beef-stew” یا عنوان نوشته عبارت “Irish Stew” باشد. نکته: قابلیت مرتب سازی در [[نگارش ۲٫۵]] به وردپرس اضافه شد.
هر گونه صفحه حاوی نوشته
- comments_open()
هنگامی که امکان ارسال دیدگاه برای نوشته ای که در [[حلقه وردپرس]] در حال پردازش است، وجود دارد.
- pings_open()
هنگامی که امکان پینگ برای نوشته ای که در [[حلقه وردپرس]] در حال پردازش است، وجود دارد.
صفحه برگه ها
در این قسمت منظور از [[برگه ها]] ی وردپرس صفحات وب وبلاگتان نیست.
- is_page()
هنگامی که یک [[برگه]] به نمایش در می آید.
- is_page('42')
هنگامی که [[برگه]] شماره ۴۲ به نمایش درمی آید.
- is_page('About Me And Joe')
هنگامی که [[برگه]] ای با “عنوان” “About Me And Joe” به نمایش درمی آید.
- is_page('about-me')
هنگامی که [[برگه]] ای با “نامک” (نام لاتین) “about-me” به نمایش درمی آید.
- is_page(array(42,'about-me','About Me And Joe'))
نتیجه در صورتی TRUE خوهد بود که [[برگه]] به نمایش درآمده نوشته شماره ۴۲ باشد یا “نامک (نام لاتین)” آن ” “about-me” یا عنوان آن ” About Me And Joe” باشد. نکته: قابلیت مرتب سازی در [[نگارش ۲٫۵]] به وردپرس اضافه شد.
آزمون زیربرگه ها
هنوز قابلیت is_subpage() عملی نشده است اما می توانید با دستوری کوچک آن را بیازمایید:
<?php // Get $post if you're inside a function global $post; if (is_page() && $post->post_parent ) { // This is a subpage } else { // This is not a subpage } ?>
چنانچه تمایل داشتید بدانید برگه موردنظر خود یک برگه خاص و یا تنها یک زیربرگه است، شناسهی برگهی مادر را از بخش ویرایش برگهها (برای این برگه) بدست آورده٬ سپس از دستوری شبیه این استفاده کنید:
<?php if (is_page(about) || $post->post_parent=="2") { $bannerimg="home.jpg"; } elseif (is_page(learning) || $post->post_parent=="56") { $bannerimg="teaching.jpg"; } elseif (is_page(admissions) || $post->post_parent=="15") { $bannerimg="admissions.jpg"; } else { $bannerimg="home.jpg" ; // Fall-through } ?>
پوسته برگه؟
به کمک این قابلیت که از [[نگارش ۲٫۵]] به وردپرس اضافه شده است می توان متوجه شد که آیا در یک پوسته برگه هستیم و یا این که پوسته برگه خاصی مورد استفاده قرار گرفته است یا خیر.
- is_page_template()
آیا [[پوسته برگه]] مورد استفاده قرار گرفته است؟I
- is_page_template('about.php')
آیا [[پوسته برگه]] ‘about’ مورد استفاده قرار گرفته است؟
توجه داشته باشید که در این تابع برخلاف سایر توابع شرطی چنانچه بخواهید پوسته برگه خاصی را مشخص کنید لازم است از نام پرونده آن یعنی about.php یا my_page_template.php استفاده کنید.
برگه دسته
- is_category()
هنگامی که برگه بایگانی دسته ها به نمایش در می آید.
- is_category('9')
هنگامی که برگه بایگانی دسته ۹ به نمایش در می آید.
- is_category('Stinky Cheeses')
هنگامی که برگه بایگانی دسته ای با نام ” Sticky Cheeses” به نمایش در می آید.
- is_category('blue-cheese')
هنگامی که برگه بایگانی دسته ای با نامک (نام لاتین) “blue-cheese” به نمایش در می آید.
- is_category(array(9,'blue-cheese','Stinky Cheeses'))
چنان چه دسته نوشته های به نمایش درآمده دسته ای با شناسه ۹، نامک (نام لاتین) “blue-cheese” یا نام “Stinky Cheeses” باشد، پاسخ مثبت خواهد بود. نکته: قابلیت مرتب سازی در [[نگارش ۲٫۵]] به وردپرس اضافه شد.
- in_category('5')
چنان چه نوشته حاضر “در” دسته خاصی که شناسه آن قید شده است باشد، پاسخ مثبت خواهد بود. بیشتر بخوانید
نکته: هنگام آزمون دقت کنید تا دو واژه “is” و “in” را اشتباه وارد نکنید.
برای اطلاعات بیشتر بخش [[is_archive()]] و [[پوسته های دسته]] را مطالعه کنید.
برگه برچسب
- is_tag()
هنگامی که برگه بایگانی برچسب ها به نمایش در می آید.
- is_tag('mild')
هنگامی که برگه بایگانی برای برچسبی با نامک (نام لاتین) ‘mild’ به نمایش در می آید.
- is_tag(array('sharp','mild','extreme'))
چنان چه نامک (نام لاتین) بایگانی برچسب به نمایش درآمده “sharp”، “mild” یا “extreme” باشد، پاسخ مثبت خواهد بود. نکته: قابلیت مرتب سازی در [[نگارش ۲٫۵]] به وردپرس اضافه شد.
- has_tag()
هنگامی که نوشته حاضر دارای برچسب است. باید داخل حلقه مورد استفاده قرار گیرد.
نکته: تابع has_tag در [[نگارش ۲٫۶]] به وردپرس اضافه شد.
- has_tag('mild')
هنگامی که نوشته حاضر دارای برچسب “mild” باشد.
- has_tag(array('sharp','mild','extreme'))
هنگامی که برچسب نوشته حاضر یکی از برچسب های موجود در مجموعه مرتب شده باشد.
برای اطلاعات بیشتر بخش [[is_archive()]] و [[پوسته های برچسب]] را مطالعه کنید.
برگه نویسنده
- is_author()
هنگامی که برگه نویسنده به نمایش در می آید.
- is_author('4')
هنگامی که برگه نویسنده شماره ۴ (نویسنده ای که شناسه ۴ به او تعلق دارد) به نمایش در می آید.
- is_author('Vivian')
هنگامی که برگه بایگانی نویسنده ای با نام لقب “Vivian” به نمایش در می آید.
- is_author('john-jones')
هنگامی که برگه بایگانی نویسنده ای با نام لاتین “john-jones” به نمایش درمی آید.
- is_author(array(4,'john-jones','Vivian'))
هنگامی که برگه بایگانی نویسنده ای با شناسه ۴ ،نام کاربری لاتین “john-jones” یا لقب “Vivian” به نمایش درمی آید. نکته: قابلیت مرتب سازی در [[نگارش ۲٫۵]] به وردپرس اضافه شد.
برای اطلاعات بیشتر بخش [[is_archive()]] و [[پوسته های نویسنده]] را مطالعه کنید.
برگه تاریخ
- is_date()
هنگامی که برگه های بایگانی بر اساس تاریخ ( ماهانه، سالانه، روزانه یا …) به نمایش درمی آیند.
- is_year()
هنگامی که بایگانی سالانه به نمایش درمی آید.
- is_month()
هنگامی که بایگانی ماهانه یه نمایش درمی آید.
- is_day()
هنگامی که بایگانی روزانه به نمایش درمی آید.
- is_time()
هنگامی که بایگانی براساس ساعت، دقیقه یا ثانیه به نمایش درمی آید.
برای اطلاعات بیشتر بخش [[is_archive()]] را مطالعه کنید.
برگه های بایگانی
- is_archive()
هنگامی که برگه های بایگانی به نمایش درمی آیند. این برگه های بایگانی شامل برگه های دسته، برچسب، نویسنده، تاریخ و سایر انواع بایگانی می شوند.
برگه نتیجه جستجو
- is_search()
هنگامی که برگه بایگانی نتیجه جستجو به نمایش در می آید.
برگه خطای ۴۰۴ : پیدا نشد
- is_404()
هنگامی که برگه ای پس از خطای “اچ تی تی پی ۴۰۴: پیدا نشد”، به نمایش در می آید.
برگه چندصفحه ای
- is_paged()
هنگامی که برگه به نمایش درآمده صفحه بندی می شود. منظور از صفحه بندی آن است که برگه بایگانی یا اصلی به چندین صفحه تقسیم می شود و به نمایش در می آید. در اینجا نوشته یا [[برگه]] ای که محتوای آن با استفاده از [[برچسب سریع]] به چندین صفحه تقسیم می شود، مدنظر نیست.
پرونده سنجاق شده
- is_attachment()
هنگامی که پرونده سنجاق شده به یک نوشته یا [[برگه]] به نمایش درمی آید. پرونده سنجاق شده تصویر یا هرگونه پرونده ای است که یا استفاده از ابزار بارگذاری در بخش ویرایشگر نوشته ها، بارگذاری شده باشد. پرونده های سنجاق شده را می توان در برگه یا پوسته خودشان نمایش داد. برای اطلاعات بیشتر [[سنجاق کردن تصویر و پرونده]] را مطالعه کنید.
انتشار هم زمان
- is_feed()
هنگامی که سایت درخواستی از جمله سایتهای [[انتشار هم زمان]] است. این تابع معمولا به وسیله کاربران مورد استفاده قرار نمی گیرد و بیشتر مورد استفاده گروه داخلی وردپرس است. البته تابع فوق در دسترس سازندگان افزونه ها نیز قرار دارد.
بازتاب
- is_trackback()
هنگامی که سایت درخواستی در موتور بازتاب خود از قلاب وردپرس استفاده می کند. این تابع معمولا به وسیله کاربران مورد استفاده قرار نمی گیرد و بیشتر مورد استفاده گروه داخلی وردپرس است. البته تابع فوق در دسترس سازندگان افزونه ها نیز قرار دارد.
پیش نمایش
- is_preview()
هنگامی که یک نوشته در جالت پیش نویس به نمایش درمی آید.
چکیده
- !empty($post->post_excerpt)
روش خاص تعبیه شده ای وجود ندارد تا از طریق آن دریابیم نوشته ای دارای چکیده است یا خیر. اما با استفاده از تابع فوق می توان به این هدف دست پیدا کرد. با حذف ‘!’ نوشته های فاقد چکیده مشخص می شوند.
نمونه های عملی
در این قسمت برای نشان دادن نحوه استفاده از این توابع شرطی با چند نمونه عملی آشنا می شویم.
تک نوشته
در این نمونه یاد خواهیم گرفت که چگونه با استفاده از تابع is_single() می توان تنها موردی خاص را هنگام مشاهده صفحه مربوط به آن نوشته به نمایش درآورد:
if (is_single()) { echo 'This is just one of many fabulous entries in the ' . single_cat_title() . ' category!'; }
تفاوت های زمانی
گاه ممکن است شخصی بخواهد از سایت شما بر اساس تاریخ انتشار نوشته های آن استفاده کند، برای سهولت در کار این خواننده می توان نوشته های مریوط به سال های مختلف را با رنگ های متفاوت از یکدیگر جدا کرد:
<?php // this starts The Loop if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <h2 id="post-<?php the_ID(); ?>"> <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"> <?php the_title(); ?></a></h2> <small><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></small> <?php // are we showing a date-based archive? if (is_date()) { if (date('Y') != get_the_date('Y')) { // this post was written in a previous year // so let's style the content using the "oldentry" class echo '<div class="oldentry">'; } else { echo '<div class="entry">'; } } else { echo '<div class="entry">'; } the_content('Read the rest of this entry »'); ?> </div>
محتوای متغیر نوار کناری
در این نمونه یاد خواهیم گرفت که چگونه می توان بر اساس صفحه ای که خواننده در حال بازدید از آن است محتوایی متفاوت را در نوار کناری نشان داد.
<!-- begin sidebar --> <div id="sidebar"> <?php // let's generate info appropriate to the page being displayed if (is_home()) { // we're on the home page, so let's show a list of all top-level categories echo "<ul>"; wp_list_cats('optionall=0&sort_column=name&list=1&children=0'); echo "</ul>"; } elseif (is_category()) { // we're looking at a single category view, so let's show _all_ the categories echo "<ul>"; wp_list_cats('optionall=1&sort_column=name&list=1&children=1&hierarchical=1'); echo "</ul>"; } elseif (is_single()) { // we're looking at a single page, so let's not show anything in the sidebar } elseif (is_page()) { // we're looking at a static page. Which one? if (is_page('About')) { // our about page. echo "<p>This is my about page!</p>"; } elseif (is_page('Colophon')) { echo "<p>This is my colophon page, running on WordPress " . bloginfo('version') . "</p>"; } else { // catch-all for other pages echo "<p>Vote for Pedro!</p>"; } } else { // catch-all for everything else (archives, searches, 404s, etc) echo "<p>Pedro offers you his protection.</p>"; } // That's all, folks! ?> <form id="searchform" method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <div> <input type="text" name="s" id="s" size="15" /> <input type="submit" value="<?php _e('Search'); ?>" /> </div> </form> </div> <!-- end sidebar -->
برگه ای مفید برای خطای ۴۰۴
بازدیدکننده هنگام مواجهه با پیام خطای ۴۰۴ معمولا جا می خورد و این اصلا خوب نیست. در وردپرس شما می توانید از شدت این امر بکاهید و درواقع از آن به نفع کاربران و خودتان استفاده کنید. در این روش هرگاه کاربر به پیوندی مراجعه کند و با پیام خطای ” این صفحه وجود ندارد” روبرو شود، نامه الکترونیکی حاوی گزارش این خطا برایتان ارسال می شود:
<p>You <?php #some variables for the script to use #if you have some reason to change these, do. but wordpress can handle it $adminemail = get_bloginfo('admin_email'); #the administrator email address, according to wordpress $website = get_bloginfo('url'); #gets your blog's url from wordpress $websitename = get_bloginfo('name'); #sets the blog's name, according to wordpress if (!isset($_SERVER['HTTP_REFERER'])) { #politely blames the user for all the problems they caused echo "tried going to "; #starts assembling an output paragraph $casemessage = "All is not lost!"; } elseif (isset($_SERVER['HTTP_REFERER'])) { #this will help the user find what they want, and email me of a bad link echo "clicked a link to"; #now the message says You clicked a link to... #setup a message to be sent to me $failuremess = "A user tried to go to $website" .$_SERVER['REQUEST_URI']." and received a 404 (page not found) error. "; $failuremess .= "It wasn't their fault, so try fixing it. They came from ".$_SERVER['HTTP_REFERER']; mail($adminemail, "Bad Link To ".$_SERVER['REQUEST_URI'], $failuremess, "From: $websitename <noreply@$website>"); #email you about problem $casemessage = "An administrator has been emailed about this problem, too.";#set a friendly message } echo " ".$website.$_SERVER['REQUEST_URI']; ?> and it doesn't exist. <?php echo $casemessage; ?> You can click back and try again or search for what you're looking for: <?php include(TEMPLATEPATH . "/searchform.php"); ?> </p>
برجسته سازی پویا در فهرست ها
در مقاله [[برجسته سازی پویا در فهرست ها]] درباره نحوه استفاده از توابع شرطی به منظور مشخص ساختن برگه مورد مشاهده، در فهرست بحث می شود.