Conditional Tags – مقدمه

در این بخش از آموزش های طراحی قالب وردپرس، می خواهیم به بررسی conditional tags در وردپرس بپردازیم.

می توان گفت که در بیشتر قسمت های قالب وردپرس و در انواع template file ها در وردپرس، شما از conditional tags برای تصمیم گیری های خود و عوض کردن ظاهر نمایش محتواهای خود بهره می برید.

Conditional Tags یا تگ های شرطی در وردپرس ، در واقع همان شرط هایی هستند که در هسته وردپرس تعبیه شده اند تا عمل تصمیم گیری برای نمایش محتواها را برای شما ساده تر انجام بدهند و شما را از نوشتن کدهای اضافه ، بی نیاز گرداند.

conditional tags در وردپرس چیست

Conditional Tags در وردپرس چیست؟

شما می توانید در template file ها و با استفاده conditional tag ها، بسته به اینکه چه شرط هایی  در صفحه جاری با آن شرط سازگار است، نحوه نمایش محتواهای خود را عوض کرده یا دستکاری نمایید.

در واقع conditional tags ها به وردپرس می گویند که چه کدی تحت چه شرایطی باید به نمایش دربیاید و یا اجرا گردد.  عموما conditional tags با همان دستورات شرطی if و else موجود در php کار می کنند و استفاده می شوند.

عموما یک تگ شرطی در داخل یک بلاک if/else قرار می گیرید. Conditional tag در ابتدای کد چک شده و در صورتی که نتیجه آن true باشد، مجموعه کدهای اول (موجود در بلاک if) اجرا می شوند. اما در صورتی که نتیجه آن false باشد، از اجرای مجموعه کد اول در بدنه بخش if ، صرف نظر شده و دومین مجموعه کد (بعد از بخش else ) به جای آن اجرا می گردد.

به عنوان مثال، فرض کنید که بخواهید چک کنید که آیا کاربر در سایت شما لاگین کرده است یا خیر و بسته به لاگین بودن و نبودن آن، پیام های متفاوت خوش آمدگویی را به او نمایش دهید:

if ( is_user_logged_in() ):
    echo 'Welcome, registered user!';
else:
    echo 'Welcome, visitor!';
endif;

کجا از Conditional Tags استفاده می کنیم؟

برای اینکه شما بتوانید به توسط تگ های شرطی یا همان conditional tags داده های خود را تغییر دهید، می باید قبل از استفاده از آن ها، اطلاعات مربوطه را از دیتابیس سایت خود، دریافت کرده باشید، این یعنی اینکه تگ شرطی می باید بعد از اجرا شدن query بر روی دیتابیس شما، مورد استفاده قرار بگیرد.

در صورتی که شما از conditional tags پیش از گرفتن این داده ها، استفاده نمایید، هیچ پاسخی از بلاک های if/else دریافت نخواهید کرد.

بهترین راه برای استفاده از conditional tags استفاده از دو راه زیر می باشد:

  • از آن ها در داخل Template files ها استفاده کنیم
  • یک تابع خارج از فایل functions.php داشته باشید که توسط یک هوک action یا filter به آن متصل شده باشد که بعد از اجرای functions.php به اجرا دربیاید.

استفاده از conditional tags برای بخش های مختلف وردپرس

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

Conditional tag برای صفحه نخست بلاگ یا Main Page

نتیجه این شرط هنگامی درست می شود، که صفحه بارگذاری شده، صفحه بلاگ سایت وردپرس شما باشد. این بستگی به تنظیمات سایت وردپرس شما در بخش “تنظیمات” و در داخل بخش “خواندن” دارد.

Conditional Tag برای صفحه اصلی سایت یا Front Page

این شرط هنگامی درست تعبیر می شود که front page سایت شما، نمایش داده شود (جدا از اینکه این صفحه یک صفحه استاتیک باشد و یا صفحه ای باشد که آخرین پست های شما را نمایش دهد)

مقدار این شرط در یکی از دو شرایط زیر  true خواهد شد:

  • در بخش تنظیمات سایت وردپرس و در بخش “خواندن” ،بخش صفحه نخست یا همان front page بر روی آخرین پست های سایت شما تنظیم شده باشد.
  • در بخش تنظیمات سایت وردپرس و در بخش “خواندن” ،بخش صفحه نخست یا همان front page بر روی یک صفحه استاتیک در سایت شما تنظیم شده باشد و اطلاعات آن صفحه، در آن لحظه به نمایش دربیاید.

Conditional Tag برای پنل ادمین سایت یا Administration Panel

این شرط در صورتی true می گردد که پنل ادمین یا همان داشبورد مدیریتی سایت شما نمایش داده شود.

Conditional Tag برای پنل ادمین سایت یا Administration Panel

این شرط در صورتی true خواهد شد که یک پست تکی یا همان Single Post (که می تواند یک نوشته، یا یک ضمیمه یا attachment و یا یک پست سفارشی یا همان custom post type باشد) به نمایش دربیاید. در صورتی که یک صفحه یا همان page به نمایش دربیاید، خروجی این تگ شرطی، false خواهد بود.

مثال های زیر بخش هایی از کاربرد این تگ شرطی در وردپرس می باشد:

is_single( ’۱۷’ )
//is_single() can also check for certain posts by ID and other parameters. The above example proves true when Post 17 is being displayed as a single Post.

is_single( ‘Irish Stew’ )
//Parameters include Post titles, as well. In this case, it proves true when the Post with title “Irish Stew” is being displayed as a single Post.

is_single( ‘beef-stew’ )
//Proves true when the Post with Post Slug “beef-stew” is being displayed as a single Post.

is_single( array( 17, ‘beef-stew’, ‘Irish Stew’ ) )
//Returns true when the single post being displayed is either post ID 17, or the post_name is “beef-stew”, or the post_title is “Irish Stew”.

is_single( array( 17, 19, 1, 11 ) )
//Returns true when the single post being displayed is either post ID = 17, post ID = 19, post ID = 1 or post ID = 11.

is_single( array( ‘beef-stew’, ‘pea-soup’, ‘chilli’ ) )
//Returns true when the single post being displayed is either the post_name “beef-stew”, post_name “pea-soup” or post_name “chilli”.

is_single( array( ‘Beef Stew’, ‘Pea Soup’, ‘Chilli’ ) )
//Returns true when the single post being displayed is either the post_title is “Beef Stew”, post_title is “Pea Soup” or post_title is “Chilli”.

Conditional Tag برای تشخیص Single Post یا Page یا Attachment

مشخصا زمانی true باز می گرداند که صفحه نمایش داده شده، یکی از سه نوع بالا باشد. شما باید برای این امر، با انواع پست تایپ ها در وردپرس آشنا باشید.

Conditional Tag برای تشخیص Sticky Post

گاهی اوقات می خواهیم که یک پست به صورت ثابت در front page به نمایش دربیاید. به چنین پستی، Sticky Post گفته می شود. این تابع در صورتی که پست مورد نظر، sticky post باشد، true را باز می گرداند.

is_sticky( ’۱۷’ )
//Returns true when Post 17 is considered a sticky post.

Conditional Tags برای تشخیص نوع پست ها یا Post Type

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

if ( ‘book’ == get_post_type() ) …

زمانی true بر می گرداند که پست تایپ داده شده به این تابع، از قبل در سایت وردپرس شما ثبت شده باشد (register شده باشد). این تابع از ورژن ۳ وردپرس به بعد، جایگزین تابع is_post_type شده است.

Conditional Tag برای تشخیص انواع پست های بایگانی یا Post Type Archive

is_post_type_hierarchical( ‘book’ )
//Returns true if the book post type was registered as having support for hierarchical.

Conditional Tag برای تشخیص Comment Popup

Conditional Tags برای تشخیص  فعال بودن نظرات و همین طور فعال بودن ping back در وردپرس

Conditional Tag برای تشخیص صفحه یا Page

از این تگ شرطی برای تشخیص پست تایپ Page در وردپرس استفاده می شود:

is_page()
//When any Page is being displayed.

is_page( ’۴۲’ )
//When Page 42 (ID) is being displayed.

is_page( ‘About Me And Joe’ )
//When the Page with a post_title of “About Me And Joe” is being displayed.

is_page( ‘about-me’ )
//When the Page with a post_name (slug) of “about-me” is being displayed.

is_page( array( 42, ‘about-me’, ‘About Me And Joe’ ) )
//Returns true when the Pages displayed is either post ID = 42, or post_name is “about-me”, or post_title is “About Me And Joe”.

is_page( array( 42, 54, 6 ) )
//Returns true when the Pages displayed is either post ID = 42, or post ID = 54, or post ID = 6.

استفاده از conditional tags برای تشخیص صفحات شماره گذاری شده یا Paginated Pages

در صورتی که صفحات شما (چه صفحات مربوط پست ها یا Page ها) دارای شماره گذاری بوده و شما از صفحه بندی “صفحه بعد یا صفحه قبل” استفاده نمایید، شما می توانید از این کد برای اینکه در چندین صفحه قرار دارید، استفاده نمایید.

این کد خصوصا زمانی برای شما کاربردی خواهد بود که شما مثلا بخواهید که فقط meta data های خود را در اولین صفحه مربوط به صفحه بندی، نمایش دهید. دو مثال زیر، کاربردهای این موضوع را نشان می دهند.

مثال اول:

<?php
  $paged = $wp_query->get( 'page' );
  if ( ! $paged || $paged < 2 ) {
    // This is not a paginated page (or it's simply the first page of a paginated page/post)    } else {
    // This is a paginated page.
} ?>

مثال دوم:

<?php $paged = get_query_var( 'page' ) ? get_query_var( 'page' ) : false;
    if ( $paged == false )  {
    // This is not a paginated page (or it's simply the first page of a paginated page/post) }  else  {
    // This is a paginated page.
    }
?>

نوشتن یک تگ شرطی برای تشخیص صفحات با ساختار درختی یا Sub Pages

همانگونه که می دانید در ساختار صفحات یا همان پست تایپ Page ، شما می توانید از یک ساختار درختی بهره ببرید. این یعنی یک صفحه می تواند به صورت درختی از چندین صفحه به صورت درختی، منشعب شده باشد.

در تگ های شرطی وردپرس، conditional tags ای با نام is_subpage وجود ندارد اما شما می تواند با روش های زیر آن را پیاده سازی نمایید:

  • روش اول: استفاده از یک snippet بصورت زیر می باشد
<?php  global $post; // if outside the loop
   if ( is_page() && $post->post_parent ) {
    // This is a subpage
          } else {
    // This is not a subpage
    }
?>
  • روش دوم: شما می توانید از این code snippet برای تعریف تگ شرطی is_subpage در داخل فایل functions.php خود، بهره ببرید. تفاوت این روش با روش اول در این می باشد که در روش دوم، در صورت وجود یک parent برای صفحه، ID آن به عنوان جواب بازگشت داده خواهد شد
function is_subpage() {
    global $post;                              // load details about this page
 
    if ( is_page() && $post->post_parent ) {   // test to see if the page has a parent
        return $post->post_parent;             // return the ID of the parent post
 
    } else {                                   // there is no parent so ...
        return false;                          // ... the answer to the question is false
    }
}
  • روش سوم: امثال این code snippet زمانی برای شما مفید خواهند بود که شما بخواهید تشخیص دهید که صفحه لود شده، زیر شاخه چه صفحه ای می باشد و با توجه به آن، ظاهر صفحه خود را عوض کنید. به عنوان مثال شاید شما بخواهید که بسته به parent صفحات مختلف، بنرهای مختلف در بالای صفحات خود نمایش دهید. در این صورت می توانید از کد زیر برای تشخیص آن، استفاده نمایید:
  
<?php if ( is_page( 'about' ) || '2' == $post->post_parent ) {
    // the page is "About", or the parent of the page is "About"
    $bannerimg = 'about.jpg';
} elseif ( is_page( 'learning' ) || '56' == $post->post_parent ) {
    $bannerimg = 'teaching.jpg';
} elseif ( is_page( 'admissions' ) || '15' == $post->post_parent ) {
    $bannerimg = 'admissions.jpg';
} else {
    $bannerimg = 'home.jpg'; // just in case we are at an unclassified page, perhaps the home page
}
?>
  • روش چهارم: این روش code snippet مثال قبل را به روش ساده تری پیاده سازی می کند. برای این کار تابع is_tree در نظر گرفته شده است. شما باید این کد را در فایل functions.php خود قرار داده و آن را فراخوانی به صورت زیر فراخوانی کنید:
function is_tree( $pid ) {      // $pid = The ID of the page we're looking for pages underneath
    global $post;               // load details about this page
 
    if ( is_page($pid) )
        return true;            // we're at the page or at a sub page
 
    $anc = get_post_ancestors( $post->ID );
    foreach ( $anc as $ancestor ) {
        if( is_page() && $ancestor == $pid ) {
            return true;
        }
    }
 
    return false;  // we aren't at the page, and the page is not an ancestor
}

در واقع کد بالا با با بخش چک کردن شرط در خط اول روش ۳ با استفاده از || ، جایگزین شده است.

در نظر داشته باشید که در صورتی که بیش از یک سطح یا level داشته باشید، شرایط متفاوت خواهد بود. کد بالا تنها می تواند یک سطح بالاتر از صفحه مورد نظر را تست نماید و نمی تواند به بالاترین سطح از درخت، دسترسی داشته باشد. برای این منظور باید مقداری کد بالا را دستکاری نمایید.

استفاده از conditional tag برای تشخیص یک Page Template

در صورتی که بخواهید تست کنید که آیا یک صفحه برای لود شدن از یک Page Template استفاده می کند یا خیر، می توانید از تگ استفاده کنید.

is_page_template( ‘about.php’ )
//Is Page Template ‘about’ being used?
is_page_template( ‘page-templates/about.php’ )

Conditional Tags برای تشخیص صفحات دسته بندی یا Category Page

شما برای این کار می توانید از تگ های شرطی is_category و in_category ، مطابق مثال های زیر بهره ببرید:

is_category()
//When a Category archive page is being displayed.

is_category( ‘۹’ )
//When the archive page for Category 9 is being displayed.

is_category( ‘Stinky Cheeses’ )
//When the archive page for the Category with Name “Stinky Cheeses” is being displayed.

is_category( ‘blue-cheese’ )
//When the archive page for the Category with Category Slug “blue-cheese” is being displayed.

is_category( array( 9, ‘blue-cheese’, ‘Stinky Cheeses’ ) )
//Returns true when the category of posts being displayed is either term_ID 9, or slug “blue-cheese”, or name “Stinky Cheeses”.

in_category( ‘۵’ )
//Returns true if the current post is in the specified category id.

in_category( array( 1, 2, 3 ) )
//Returns true if the current post is in either category 1, 2, or 3.

! in_category( array( 4, 5, 6 ) )
//Returns true if the current post is NOT in either category 4, 5, or 6. Note the ! at the beginning.

Conditional Tags برای تشخیص صفحات برچسب یا Tag Page

شما برای این کار می توانید از تگ های شرطی is_tag و has_tag ، مطابق مثال های زیر بهره ببرید:

is_tag()
//When any Tag archive page is being displayed.

is_tag( ‘mild’ )
//When the archive page for tag with the slug of ‘mild’ is being displayed.

is_tag( array( ‘sharp’, ‘mild’, ‘extreme’ ) )
//Returns true when the tag archive being displayed has a slug of either “sharp”, “mild”, or “extreme”.

has_tag()
//When the current post has a tag. Must be used inside The Loop.

has_tag( ‘mild’ )
//When the current post has the tag ‘mild’.

has_tag( array( ‘sharp’, ‘mild’, ‘extreme’ ) )
//When the current post has any of the tags in the array.

Conditional Tags برای تشخیص صفحات گروه بندی یا Taxonomy Page

شما برای این کار می توانید از تگ های شرطی is_tax و has_term، مطابق مثال های زیر بهره ببرید:

is_tax()
//When any Taxonomy archive page is being displayed.

is_tax( ‘flavor’ )
//When a Taxonomy archive page for the flavor taxonomy is being displayed.

is_tax( ‘flavor’, ‘mild’)
//When the archive page for the flavor taxonomy with the slug of ‘mild’ is being displayed.

is_tax( ‘flavor’, array( ‘sharp’, ‘mild’, ‘extreme’ ) )
//Returns true when the flavor taxonomy archive being displayed has a slug of either “sharp”, “mild”, or “extreme”.

has_term()
//Check if the current post has any of given terms. The first parameter should be an empty string. It expects a taxonomy slug/name as a second parameter.

has_term( ‘green’, ‘color’ )
//When the current post has the term ‘green’ from taxonomy ‘color’.

has_term( array( ‘green’, ‘orange’, ‘blue’ ), ‘color’ )
//When the current post has any of the terms in the array.

Conditional Tag برای تشخیص ثبت شدن یک گروه بندی یا Registered Taxonomy

Conditional Tag برای تشخیص صفحه نویسنده یا Author Page

is_author( ‘۴’ )
//When the archive page for Author number (ID) 4 is being displayed.

is_author( ‘Vivian’ )
//When the archive page for the Author with Nickname “Vivian” is being displayed.

is_author( ‘john-jones’ )
//When the archive page for the Author with Nicename “john-jones” is being displayed.

is_author( array( 4, ‘john-jones’, ‘Vivian’ ) )
//When the archive page for the author is either user ID 4, or user_nicename “john-jones”, or nickname “Vivian”.

Conditional Tag برای تشخیص Multi-author

زمانی از این تگ استفاده می کنیم که بیش از یک نویسنده برای یک پست منتشر شده، وجود داشته باشد.

Conditional Tags برای تشخیص صفحات تاریخ یا Date Page

is_date()
//When any date-based archive page is being displayed (i.e. a monthly, yearly, daily or time-based archive).

is_year()
//When a yearly archive is being displayed.

is_month()
//When a monthly archive is being displayed.

is_day()
//When a daily archive is being displayed.

is_time()
//When an hourly, “minutely”, or “secondly” archive is being displayed.

is_new_day()
//If today is a new day according to post date. Should be used inside the loop.

Conditional Tags برای تشخیص داشتن خلاصه نوشته یا Excerpt

کد زیر می تواند مثال خوبی در این زمینه باشد:

<?php // Get $post if you're inside a function global $post;
   if ( empty( $post->post_excerpt ) ) {
    // This post has no excerpt
   } else {
    // This post has excerpt
  }
?>

یک مثال دیگر برای این تگ شرطی، زمانی است که می خواهید در صورت وجود داشتن خلاصه یک مطلب، آن را نمایش در بیاورید. در این صورت می توانید از کد زیر استفاده کنید:

<?php
  if ( ! has_excerpt() ) {
      echo '';
  } else {
      the_excerpt();
  }
?>

در صورتی که بخواهید در صورت وجود نداشتن خلاصه یا چکیده مطلب، متنی از پیش تعریف شده را به نمایش درآورید، می توانید از کد زیر استفاده نمایید:

<?php if ( ! has_excerpt() ) {
    // you text or code
} ?>

تعدادی دیگر از conditional tags  های کاربردی در وردپرس

در ادامه به تعدادی دیگر از تگ های شرطی کاربردی در وردپرس اشاره می گردد:

//Any Archive Page
is_archive()
//When any type of Archive page is being displayed. Category, Tag, Author and Date based pages are all types of Archives.

//A Search Result Page
is_search()
//When a search result page archive is being displayed.

//A 404 Not Found Page
is_404()
//When a page displays after an “HTTP 404: Not Found” error occurs.

//An Attachment 
is_attachment()
//When an attachment document to a post or Page is being displayed. An attachment is an image or other file uploaded through the post editor’s upload utility. Attachments can be displayed on their own ‘page’ or template.

//A Single Page, Single Post or Attachment 
is_singular()
//When any of the following return true: is_single(), is_page() or is_attachment().

is_singular( ‘book’ )
//True when viewing a post of the Custom Post Types book.

is_singular( array( ‘newspaper’, ‘book’ ) )
//True when viewing a post of the Custom Post Types newspaper or book.

//A Syndication
is_feed()
//When the site requested is a Syndication. This tag is not typically used by users; it is used internally by WordPress and is available for Plugin Developers.

//A Trackback
is_trackback()
//When the site requested is WordPress’ hook into its Trackback engine. This tag is not typically used by users; it is used internally by WordPress and is available for Plugin Developers.

//A Preview 
is_preview()
//When a single post being displayed is viewed in Draft mode.
//Has A Nav Menu Assigned
has_nav_menu()
//Whether a registered nav menu location has a menu assigned
//Returns: assigned(true) or not(false)

//Inside The Loop 
in_the_loop()
//Check to see if you are “inside the loop”. Useful for plugin authors, this conditional returns as true when you are inside the loop.

//Is Sidebar Active 
is_active_sidebar()
//Check to see if a given sidebar is active (in use). Returns true if the sidebar (identified by name, id, or number) is in use, otherwise the function returns false.

//Part of a Network (Multisite)
is_multisite()
//Check to see whether the current site is in a WordPress MultiSite install.

//Main Site (Multisite)
is_main_site()
//Determines if a site is the main site in a network.

//Admin of a Network (Multisite)
is_super_admin()
//Determines if a user is a network (super) admin.

//An Active Plugin 
is_plugin_active()
//Checks if a plugin is activated.

//A Child Theme 
is_child_theme()
//Checks whether a child theme is in use.

//Theme supports a feature
current_theme_supports()
//Checks if various theme features exist.

یک مثال دیگر برای این تگ شرطی، زمانی است که می خواهید در صورت وجود داشتن خلاصه یک مطلب، آن را نمایش در بیاورید. در این صورت می توانید از کد زیر استفاده کنید:

لیست کاربردهای conditional tags یا همان تگ های شرطی در وردپرس را می توانید در زیر مشاهده می کنید (همه این لینک ها به سایت اصلی وردپرس متصل می باشند):

در ضمن شما می توانید در صورت لزوم با نحوه کار هر کدام از این تابع ها توسط لینک های زیر، آشنا گردید:

راهنما برای خواندن سایر مقالات سایت به صورت دسته بندی شده:

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