ورود عضویت ویژه
بک لینک
خانه >> طراحی و توسعه وب >> پایگاه وردپرس >> آموزش وردپرس >> آموزش جامع مدیریت و بهبود تابع the_excerpt وردپرس

آموزش جامع مدیریت و بهبود تابع the_excerpt وردپرس

12345
آموزش جامع مدیریت و بهبود تابع the_excerpt وردپرسبازبینی توسط رضافرخی(مدیر ارشد) در 04-09-1391امتیاز: 5.0آموزش جامع مدیریت و بهبود تابع the_excerpt وردپرسسلام دوستان خوبم.در آموزش امروز قصد داریم بر روی خلاصه مطالب مدیریت داشته باشیم.منظور من را زمانی می فهمید که مثلا در یک باکس می خواهید تعداد خاصی از کلمات ...

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


باید بدانید که در حالت عادی با قرار دادن دستور زیر :

[php]

<?php the_excerpt(); ?>

[/php]

بطور خلاصه به نمایش مطالب می پردازیم که این خاصیت بیشتر در صفحات archive.php یا صفحه اول دیده میشود تا بتوان بطور خلاصه تعداد مطالب بیشتری را نمایش داد.امیدوارم تا اینجا در جریان قرار گرفته باشید که چیکار میخواهیم بکنیم.برای شروع کار فایل functions.php خود را باز کنید و اگر ندارید بسازید و کد زیر را در آن قرار دهید :

[php]// 3zar.ir excerpt length.
function print_excerpt($length) { // Max excerpt length. Length is set in characters
global $post;
$text = $post->post_excerpt;
if ( ” == $text ) {
$text = get_the_content(”);
$text = apply_filters(‘the_content’, $text);
$text = str_replace(‘]]>’, ‘]]>’, $text);
}
$text = strip_shortcodes($text); // optional, recommended
$text = strip_tags($text); // use ‘ $text = strip_tags($text,'<p><a>’); ‘ if you want to keep some tags

$text = substr($text,0,$length);
$excerpt = reverse_strrchr($text, ‘.’, 1);
if( $excerpt ) {
echo apply_filters(‘the_excerpt’,$excerpt);
} else {
echo apply_filters(‘the_excerpt’,$text);
}
}

// Returns the portion of haystack which goes until the last occurrence of needle
function reverse_strrchr($haystack, $needle, $trail) {
return strrpos($haystack, $needle) ? substr($haystack, 0, strrpos($haystack, $needle) + $trail) : false;
}
[/php]

توضیح : شما در کد بالا تابعی تعریف میکنید با نام “print_excerpt” که می توانید در هر جا که خواستید داخل حلقه while جهت نمایش مطالب آن را فراخوانی کنید.

خوب حالا در مکانی که میخواهین خلاصه مطلب را نمایش بدید به جای دستورات زیر :

[php]

<?php the_excerpt(); ?>

یا

<?php the_content(); ?>

[/php]

از دستور زیر استفاده کنید :

[php]

<?php print_excerpt(50); ?>

[/php]

درکد بالا بنا به نیاز عدد 50 را تغییر دهید.

روش دوم : خوب دوستان عزیز شما تا اینجا با روش خلاصه کردن آشنا شدید, میخواهم روش دیگری که با آموزش بالا فرق دارد را بهتون یاد بدم که جالب تر است.

ابتدا بهتر بدونیم بدونیم تابع excerpt از کجا فراخوانی میشود.این تابع در فایل مورد نظر در مسیر زیر قرار دارد :

[php]

wp-includes/formatting.php

[/php]

در خط 2111 تابع wp_trim_excerpt را مشاهده میکنید که کد زیر را دارد :

[php]

function wp_trim_excerpt($text = ”) {
$raw_excerpt = $text;
if ( ” == $text ) {
$text = get_the_content(”);

$text = strip_shortcodes( $text );

$text = apply_filters(‘the_content’, $text);
$text = str_replace(‘]]>’, ‘]]&gt;’, $text);
$excerpt_length = apply_filters(‘excerpt_length’, 55);
$excerpt_more = apply_filters(‘excerpt_more’, ‘ ‘ . ‘[…]’);
$text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
}
return apply_filters(‘wp_trim_excerpt’, $text, $raw_excerpt);
}

[/php]

دوستان خوبم توجه کنید ما نمی خواهیم هسته وردپرس را از بین ببریم.خوب حالا از کد بالا یک کپی بگیرید و فایل functions.php را باز کنید و کد را در آن بگزارید.کار ما شروع میشود این تابع در خط اول با نام

[php]

wp_trim_excerpt()

[/php]

فراخوانی میشود.پس اول اسم آن را به

[php]

improved_trim_excerpt()
[/php]

تغییر دهید.شما الان در خط اول باید کدی مطابق زیر داشته باشید :

[php]

function improved_trim_excerpt($text) {

[/php]

حالا بر روی کد بصورت تخصصی تر کار میکنیم.میخواهیم طول کلمات چکیده و خلاصه مطلب را زیاد کنیم, برای این کار در خط 8 کد بالا متغییری بصورت زیر تعریف شده است :

[php]

$excerpt_length = 55;
[/php]

که شما میتوانید تعداد کلمات را با تغییر عدد 55 افزایش یا کاهش دهید.
خوب حالا میخواهیم یه مشکل دیگه خلاصه مطلب را برطرف کنیم آن هم در پاراگراف بندی است. برای این کار کد زیر را در 8 جایگزاری نمائید:

[php]

$text = strip_tags($text, ‘<p>’);
[/php]

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

[php]

$text = preg_replace(‘@<script[^>]*?>.*?</script>@si’, ”, $text);
[/php]

بسیار خوب دوستان خوبم, تا اینجا کار ما به پایان رسیده است. حال برای اینکه ببینید نتیجه کارتان را خروجی کد های بالای شما پس از تغییر باید چیزی شبیه این باشد :

[php]

function improved_trim_excerpt($text) {
global $post;
if ( ” == $text ) {
$text = get_the_content(”);
$text = apply_filters(‘the_content’, $text);
$text = str_replace(‘\]\]\>’, ‘]]&gt;’, $text);
$text = preg_replace(‘@<script[^>]*?>.*?</script>@si’, ”, $text);
$text = strip_tags($text, ‘<p>’);
$excerpt_length = 80;
$words = explode(‘ ‘, $text, $excerpt_length + 1);
if (count($words)> $excerpt_length) {
array_pop($words);
array_push($words, ‘[…]’);
$text = implode(‘ ‘, $words);
}
}
return $text;
}

[/php]

خوب برای پایان کار باید به این هسته وردپرس بگوئیم که از از تابع جدید ما یعنی improved_trim_excerpt بجای wp_trim_excerpt استفاده کند.چاره کار در اضافه کردن 2 خط کد زیر است, اول برای عدم فراخوانی و دومی برای فراخوانی :

[php]

remove_filter(‘get_the_excerpt’, ‘wp_trim_excerpt’);
add_filter(‘get_the_excerpt’, ‘improved_trim_excerpt’);

[/php]

بسیار خوب کد نهایی شما این چنین می شود :

[php]

remove_filter(‘get_the_excerpt’, ‘wp_trim_excerpt’);
add_filter(‘get_the_excerpt’, ‘improved_trim_excerpt’);
function improved_trim_excerpt($text) {
global $post;
if ( ” == $text ) {
$text = get_the_content(”);
$text = apply_filters(‘the_content’, $text);
$text = str_replace(‘\]\]\>’, ‘]]&gt;’, $text);
$text = preg_replace(‘@<script[^>]*?>.*?</script>@si’, ”, $text);
$text = strip_tags($text, ‘<p>’);
$excerpt_length = 80;
$words = explode(‘ ‘, $text, $excerpt_length + 1);
if (count($words)> $excerpt_length) {
array_pop($words);
array_push($words, ‘[…]’);
$text = implode(‘ ‘, $words);
}
}
return $text;
}
[/php]

کار تمام شد حالا شما از تابع زیر در هر جا که میخواهید استفاده کنید:

[php]

<?php the_excerpt(); ?>

[/php]

امیدوارم از این آموزش استفاده لازم را ببرید.
شادی از آن لحظه های شما …

QR: آموزش جامع مدیریت و بهبود تابع the_excerpt وردپرس
مرجع : سزار وردپرس
لینک کوتاه : https://3zar.ir/?p=16392

دیدگاه‌های کاربران 28 نظر

  1. سعید گودرزی

    خیلی جالب بود باز هم از این مطالب جالب بذارید…باز هم تشکر

  2. موفق و موید باشید

  3. پوریا شکر ریز

    موفق و موید باشید

  4. حسین حاجی پور

    ممنون از لطفتون.

  5. ابوالفضل گنجی

    واقعا عالی بود. مرسی

  6. کیوان کافی مقدم

    واقعا عالی بود. مرسی

  7. مصطفی بابایی

    جالب بود.

  8. مرتضی اعلمی ابرده

    لایــــــــــــــــــــکــ داشت.

  9. سید سعید سجادی

    درود و سپاس از شما

  10. جعفر خان محمدی

    خیلی جالب بود باز هم از این مطالب جالب بذارید…باز هم تشکر

  11. زیبا بود !

  12. دست گلت درد نکنه واقعاً جای تشکر و قدر دانی داره

  13. بسیار مقاله خوب , جامع و مفیدی بود

  14. بسیار مفید بود

  15. فرزاد | علم و دانش

    عالی بود

  16. من این کارهایی که گفتین روی فایل functions.php انجام دادم. الان سایتم این ارور رو میده:

    Fatal error: Call to undefined function remove_filter() in /home/ariaroid/public_html/wp-includes/functions.php on line 3862

    • سلام محمد جان
      عذر خواهم دیر پاسختون را میدهم.چند تا روش هست شما از کدام یکیش دارین استفاده میکنید ؟

      • سلام.
        ممنون از پاسختون.
        من میخواستم دکمه “بیشتر بخوانید” قالب صحیفه رو به دکمه ادامه مطلب تغییر بدم.
        شما گفتین از این آموزش استفاده کنم:
        https://www.3zar.ir/17476-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D8%AE%D9%84%D8%A7%D8%B5%D9%87-%D9%85%D8%B7%D9%84%D8%A8-%D9%88%D8%B1%D8%AF%D9%BE%D8%B1%D8%B3-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88.html

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

  17. خیلی ممنون, استفاده کردیم

  18. مظفر عالی زاده

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

    تشکر

    • رضافرخی(مدیر ارشد)

      سلام
      از دستور شرطی باید بهره ببرید:
      [php]
      $exc=the_excerpt(); if($exc != ”) {

      < ?php the_excerpt(); ?>

      }
      [/php]

  19. کد نهایی در فایل فانکشن کار نکرد و ارور داد… من فقط در فایل فانکشن عدد 55 رو مثلا به 100 تغییر دادم و کدهای دیگه رو اضافه نکردم که درست بود. به این صورت:
    remove_filter(‘get_the_excerpt’, ‘wp_trim_excerpt’);
    add_filter(‘get_the_excerpt’, ‘improved_trim_excerpt’);
    function improved_trim_excerpt($text) {
    $raw_excerpt = $text;
    if ( ” == $text ) {
    $text = get_the_content(”);

    $text = strip_shortcodes( $text );

    $text = apply_filters(‘the_content’, $text);
    $text = str_replace(‘]]>’, ‘]]&gt;’, $text);
    $excerpt_length = apply_filters(‘excerpt_length’, 100);
    $excerpt_more = apply_filters(‘excerpt_more’, ‘ ‘ . ‘[…]’);
    $text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
    }
    return apply_filters(‘wp_trim_excerpt’, $text, $raw_excerpt);
    }

  20. سلام
    ببخشید من این کد رو توی قالبم قراردادم ولی خط 13 رو خطا میگیره:
    if (count($words)> $excerpt_length) {
    این خط این قسمتش &gt یعنی چی؟ همین رو خطا میگیره
    ممنونم خداخیرتون بده

جوابی بنویسید

ایمیل شما نشر نخواهد شدفیلد های ضروری نشانه گذاری شده است. *

*

قبل از نوشتن دیدگاه به نکات مهم زیر توجه کنید


  • - دیدگاه‌هایی مانند: خوب بود، ممنون- سایت خوبی دارید- عالی بود و موارد مشابه تایید نمی‌شود.
  • - دیدگاه‌تان را فقط در رابطه با همین مطلب ثبت کنید، در غیر اینصورت پاسخ داده نخواهد شد.
  • - دیدگاه‌هایی که دارای نام‌های تبلیغاتی با هدف بک‌‌لینک گرفتن هستند تایید نمی‌شوند.