vBulletin Cách fix Duplicatied description khi sử dụng Mod vBSEO và First Post

Thảo luận trong 'Hỗ trợ về mã nguồn làm Forum' bắt đầu bởi babyinternet, 22/7/13.

  1. babyinternet

    babyinternet Administrator

    Tham gia ngày:
    4/7/08
    Bài viết:
    4,655
    Đã được thích:
    1,583
    Điểm thành tích:
    113
    Nơi ở:
    [}{]e[][]
    Bạn nào xài vBSEO mà kết hợp với thằng First Post chắc cũng có đôi lúc khó chịu khi nào Google webmaster Tools lại thấy một đống Meta descrition bị trùng do bài đầu tiên có nội dung luôn luôn giống nhau nên thằng First Post nó lấy nội dung bài đầu làm description dẫn đến bị trùng khá nhiều. Nhất là đối với những bài có tính thảo luận cao, nhiều trang thì tình trạng bị trùng lại càng nặng hơn.

    Sau đây mình sẽ hướng dẫn các bạn cách khắc phục việc này. Lưu ý là việc này chỉ áp dụng cho các bạn xài VBSEO với First Post in all Page thôi nha, những bạn nào không xài cái này hoặc không xài cùng lúc cả 2 cái thì không cần làm chi cho nó mệt thây ra.

    Đầu tiên bạn tìm hàm vbseo_extract_msg_postbits() nằm trong file functions_vbseo_vb.php của vBSEO và thay đổi nó bằng:

    PHP:
    function vbseo_extract_msg_postbits($postno 0)
    {
    global 
    $vbulletin;


    $msg '';
    $pbits $GLOBALS['postbits'];
    if(!
    $pbits)
    $pbits vBSEO_Storage::get('cms_text');


    if(
    $pbits)
    {
    preg_match_all('#<!--\s*message\s*-->(.*?)<!--\s*/\s*message\s*-->#s'$pbits$post_match);
    if(!
    $post_match || !$post_match[1] || (isset($vbulletin) && $vbulletin->gars) ){
    $lfor = (VBSEO_VB4'</blockquote>' '</div>');
    if(
    strstr($pbits$lfor))
    preg_match_all('#post_message_[^>]*?\>(.*?)'.$lfor.'#s'$pbits$post_match);


    }


    $msg preg_replace('#<!--.*?-->#s'''$msg);
    $msg str_replace('>Quote:<'''$post_match[1][$postno]);
    $msg preg_replace('#<div>Originally Posted by.*?</div>#'''$msg);
    $msg preg_replace('#<script.*?\>.*?</script>#is'''$msg);
    $msg preg_replace('#(<.*?\>)+#s'' '$msg);
    $msg trim($msg);
    }

    return 
    $msg;
    }
    Khác với hàm cũ, hàm này bổ sung thêm biến $postno lấy từ số trang ra. Ví dụ trang 1 sẽ có $postno có giá trị là 1, trang 2 là 2 ....

    Tiếp theo bạn mở functions_vbseo.php và tìm dòng sau:

    PHP:
    $desc_content vbseo_extract_msg_postbits();
    Thay nó bằng:

    PHP:
    $desc_content vbseo_extract_msg_postbits(intval($_GET['page'])>0);
    Vậy là xong, tùy theo trang nào hàm vbseo_extract_msg_postbits ở trên sẽ lấy nội dung bài đầu tiên hoặc bài thứ 2 tuơng ứng để tránh việc lấy bài đầu dẫn đến bị trùng description.

    Chúc bạn thành công. Tui cũng viết bài này để lưu lại sau này sử dụng nếu cần.
     
Đang tải...

Chia sẻ trang này