Hiển thị tiêu đề SEO SEO Yoast trong mẫu lưu trữ


13

Plugin WordPress SEO của Yoast cho phép người dùng thêm tiêu đề SEO và mô tả meta vào các trang lưu trữ thuật ngữ phân loại. Chúng sau đó được sử dụng trong phần đầu của tài liệu.

Tôi đang cố gắng hiển thị tiêu đề SEO của các thuật ngữ phân loại dưới dạng H1 trong mẫu lưu trữ phân loại của tôi.

Để làm điều này trong một bài đăng, loại bài đăng hoặc trang rất dễ dàng:

echo get_post_meta($post->ID, '_yoast_wpseo_title', true); 

Trên các mẫu lưu trữ này không hoạt động.

Có ai biết làm thế nào để làm việc này?

Ảnh chụp màn hình ví dụ

Đây là tiêu đề của một thuật ngữ thẻ cụ thể. Tôi đang cố gắng hiển thị tiêu đề này - nhưng sau đó cho một thuật ngữ phân loại tùy chỉnh - trong các mẫu lưu trữ của tôi.

Màn hình chỉnh sửa lưu trữ thẻ

Mã cuối cùng

Đây là những gì tôi đã sử dụng trong archive.phpmẫu của tôi . Nó hoạt động nếu bạn sử dụng phân loại tùy chỉnh. Đối với các thẻ hoặc danh mục, hãy xem câu trả lời của Mike Madern bên dưới.

<h1 class="archive-title">
<?php
if ( is_tax() ) :                                                                   
    $taxonomy = get_queried_object()->taxonomy;
    $term_id = get_queried_object()->term_id;
    $meta   = get_option( 'wpseo_taxonomy_meta' );
    $title  = $meta[$taxonomy][$term_id]['wpseo_title'];
    //printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_taxonomy_meta' ), 1 ) );
    if ( isset($meta) && !empty($title) ) :         
        echo apply_filters( 'the_title', $title );
    else :
        single_term_title();    
    endif;
endif;                              
?>
</h1>  

Câu trả lời:


19

Nhận danh hiệu SEO Lưu trữ

Nếu bạn đã xác định tiêu đề lưu trữ Loại bài đăng tùy chỉnh, bạn có thể nhận được điều đó bằng cách:

$titles = get_option( 'wpseo_titles' );
$title  = $titles['title-ptarchive-POST_TYPE'];

echo apply_filters( 'the_title', $title );

Hãy nhớ thay thế POST_TYPEbằng Loại bài tùy chỉnh của riêng bạn.

Để hiển thị tất cả các wpseo_titlebiến, bạn có thể sử dụng:

printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_titles' ), 1 ) );

Vì vậy, bạn có thể dễ dàng chọn một trong những bạn cần.

Nhận các tiêu đề SEO hạn

Thể loại

Bằng cách sử dụng mã này, bạn có thể có được tiêu đề SEO bạn đã xác định:

$cat_id = get_query_var( 'cat' );
$meta   = get_option( 'wpseo_taxonomy_meta' );

$title  = $meta['category'][$cat_id]['wpseo_title'];

echo apply_filters( 'the_title', $title );

Thẻ

Bằng cách sử dụng mã này, bạn có thể có được tiêu đề SEO bạn đã xác định:

$tag_id = get_query_var( 'tag' );
$meta   = get_option( 'wpseo_taxonomy_meta' );

$title  = $meta['post_tag'][$tag_id]['wpseo_title'];

echo apply_filters( 'the_title', $title );

Để hiển thị tất cả các wpseo_taxonomy_metabiến, bạn có thể sử dụng:

printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_taxonomy_meta' ), 1 ) );

Bằng cách này bạn có thể thấy cấu trúc và các biến có sẵn.


Bạn đã thêm tiêu đề trong SEO > tiêu đề & metas > Loại bài đăng ?
Mike Madern

Tôi đã cải thiện câu trả lời của mình bằng giải pháp :-)
Mike Madern

Tôi đoán bạn đã bỏ lỡ chỉnh sửa bài đăng cuối cùng của tôi: -PI đã thêm một phiên bản với $tag_id.
Mike Madern

1
Cảm ơn rất nhiều về mã, tôi không bao giờ có thể tìm ra điều này. Tôi đã thực hiện một vài thay đổi nhỏ để làm cho nó hoạt động với các phân loại tùy chỉnh.
Mattvic

Điều đó thật tuyệt. Tôi đã phải sử dụng get_queried_object()->term_id, thay vì get_query_var()mặc dù, vì cái trước trả về id, cái sau trả về sên, làm cho mã ném ra không xác định chỉ mục thông báo. Ngoài ra, hãy cẩn thận khi kiểm tra nếu có bất cứ điều gì bộ tại $meta['post_tag|category'], như bạn sẽ nhận được thông báo chỉ số không xác định là tốt. (WP 4.2.2, btw)
cabgfx

5

Trên trang lưu trữ trong vòng lặp bài đăng thêm dòng mã sau để làm cho nó hoạt động

echo get_post_meta(get_the_ID(), '_yoast_wpseo_title', true); 

Hãy cho tôi biết liệu nó đang làm việc cho bạn hay tôi sẽ cung cấp một giải pháp khác.


Thật không may làm việc không may. Nó cho thấy tiêu đề SEO của bài viết đầu tiên trong kho lưu trữ. Tôi có thể phải đi sâu vào DB để xem dữ liệu này được lưu trữ ở đâu.
Mattvic

Bạn đang sử dụng nó trong vòng lặp? Bạn có thể cho tôi xem mã?
Vinod Dalvi

Tôi đã thêm mã của tôi. Không chắc chắn nếu tôi giải thích rằng tôi muốn xuất tiêu đề trang, không phải tiêu đề của mỗi bài đăng trong vòng lặp.
Mattvic

Điều này thật đúng với gì mà tôi đã tìm kiếm. Xuất ra tiêu đề SEO trong vòng lặp. Ngoài ra, tôi đã thay thế get_the_ID () bằng $ post-> ID
gerbz

Điều này cứu mạng tôi. tốt ..
Mukii kumar

0

Lấy từ khóa trọng tâm cho danh mục và thẻ

Để có được từ khóa trọng tâm của Danh mục hoặc Thẻ theo chương trình, bạn có thể sử dụng một trong hai phương pháp sau:

            /** Method 1. Tap into the options directly. **/
            $meta = get_option( 'wpseo_taxonomy_meta' ); // needed only once, so keep this outside/before your foreach loop.

            $posttags = get_the_tags();
            if ($posttags) {
                foreach( $posttags as $tag ) {
                    echo $meta['post_tag'][$tag->term_id]['wpseo_focuskw'];
                }
            }

Về cơ bản, đây là cách tiếp cận được Mike sử dụng ở cuối bài.

hoặc là

            /** Method 2. Use Yoast's function. **/
            $posttags = get_the_tags();
            if ($posttags) {
                foreach( $posttags as $tag ) {
                    echo WPSEO_Taxonomy_Meta::get_term_meta( $tag->term_id, 'post_tag', 'focuskw' );
                }
            }

Tôi có xu hướng thích cách tiếp cận thứ hai bởi vì cách này tôi không phải tìm nạp hoặc quan tâm đến việc tự mình nhận tùy chọn meta.

Theo cách của bạn functions.php, bạn có thể muốn kiểm tra if class_exists( 'WPSEO_Taxonomy_Meta' )và sau đó có thể bọc chức năng Yoast thành một functon của riêng bạn, để an toàn trong trường hợp bạn đã từng ngừng sử dụng Yoast SEO.

Một số nền tảng

Như đã đề cập trong câu hỏi ban đầu, một cái gì đó như get_post_meta( $tag->term_id, '_yoast_wpseo_focuskw', true);sẽ không hoạt động cho các danh mục và trang (nó sẽ không trả lại gì cả.)

Vậy tại sao vậy?

Đó là bởi vì, đối với các danh mục và thẻ, từ khóa trọng tâm được lưu ở nơi khác trong cơ sở dữ liệu. Thay vì được lưu bên trong wp_postmetabảng như bình thường, nó được chôn sâu bên trong wp_optionsbảng, dưới dạng đối tượng JSON.

Các phương pháp trên cho phép chúng tôi truy cập các giá trị này.


Cuối cùng, nếu bạn giống tôi và không thể nhớ tên của các nguyên tắc phân loại (ví dụ: không rõ tại sao thẻ sử dụng phân loại post_tagvà không chỉ tag, hãy kiểm tra các URL khi bạn chỉnh sửa danh mục hoặc thẻ: nó sẽ hiển thị …taxonomy=category…hoặc như thế.


0

Trả lời Lấy từ khóa trọng tâm cho danh mục và thẻ

// nó hoạt động thankyou
// với phần còn lại api

get / wp-json / wp / v2 / loại? slug =slug_name

plugin.in sử dụng Phương pháp 1

thay đổi dòng

$meta['post_tag'][$tag->term_id]['wpseo_focuskw'];

$meta['category'][$param_post_id]['wpseo_focuskw'];

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.