แสดงชื่อ Yoast WordPress SEO ในเทมเพลตเก็บถาวร


14

ปลั๊กอิน WordPress SEO ของ Yoast ช่วยให้ผู้ใช้สามารถเพิ่มชื่อเรื่อง SEO และคำอธิบายเมตาไปยังหน้าจัดเก็บคำศัพท์แบบอนุกรมวิธาน สิ่งเหล่านี้จะถูกใช้ในส่วนหัวของเอกสาร

ฉันกำลังพยายามแสดงชื่อ SEO ของคำศัพท์อนุกรมวิธานเป็น H1 ในเทมเพลตการจัดเก็บภาษีอนุกรมวิธานของฉัน

หากต้องการทำสิ่งนี้ในโพสต์โพสต์ประเภทหรือหน้าเป็นเรื่องง่าย:

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

ในแม่แบบเก็บถาวรนี้ไม่ทำงาน

ไม่มีใครรู้วิธีการทำงานนี้หรือไม่

ตัวอย่างภาพหน้าจอ

นี่คือชื่อของคำแท็กเฉพาะ ฉันกำลังพยายามแสดงชื่อนี้ - แต่สำหรับเทอมอนุกรมวิธานที่กำหนดเอง - ในเทมเพลตเก็บถาวรของฉัน

หน้าจอแก้ไขแท็กการเก็บถาวร

รหัสสุดท้าย

นี่คือสิ่งที่ฉันใช้ในarchive.phpเทมเพลต มันทำงานได้ถ้าคุณกำลังใช้อนุกรมวิธานที่กำหนดเอง สำหรับแท็กหรือหมวดหมู่ให้ดูที่คำตอบของ Mike Madern ด้านล่าง

<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>  

คำตอบ:


19

รับบทความ SEO ที่เก็บถาวร

หากคุณกำหนดชื่อไฟล์เก็บถาวรประเภทโพสต์ที่กำหนดเองคุณสามารถทำได้โดย:

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

echo apply_filters( 'the_title', $title );

อย่าลืมแทนที่POST_TYPEด้วยประเภทโพสต์ที่คุณกำหนดเอง

ในการแสดงwpseo_titleตัวแปรทั้งหมดคุณสามารถใช้:

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

ดังนั้นคุณสามารถเลือกสิ่งที่คุณต้องการได้อย่างง่ายดาย

รับชื่อ SEO ระยะ

หมวดหมู่

ด้วยการใช้รหัสนี้คุณจะได้รับชื่อ SEO ที่คุณกำหนด:

$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 );

แท็ก

ด้วยการใช้รหัสนี้คุณจะได้รับชื่อ SEO ที่คุณกำหนด:

$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 );

ในการแสดงwpseo_taxonomy_metaตัวแปรทั้งหมดคุณสามารถใช้:

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

วิธีนี้คุณสามารถดูโครงสร้างและตัวแปรที่มีอยู่


คุณเพิ่มชื่อในSEO > ชื่อ & เมตา > ประเภทโพสต์ ?
Mike Madern

ฉันปรับปรุงคำตอบของฉันด้วยวิธีแก้ปัญหา :-)
Mike Madern

ฉันคาดเดาคุณพลาดโพสต์ล่าสุดของฉันแก้ไข: -PI $tag_idเพิ่มรุ่นที่มี
Mike Madern

1
ขอบคุณมากสำหรับรหัสฉันไม่สามารถหาคำตอบได้ ฉันได้ทำการเปลี่ยนแปลงเล็กน้อยเพื่อให้มันทำงานกับ taxonomies ที่กำหนดเองได้
Mattvic

มันเยี่ยมมาก ฉันต้องใช้get_queried_object()->term_idแทนget_query_var()แม้ว่าเมื่อก่อนจะส่งคืนรหัสหลังจะส่งคืนกระสุนทำให้โค้ดโยน "ดัชนีที่ไม่ได้กำหนด" ประกาศ นอกจากนี้ยังดูแลเพื่อตรวจสอบว่ามีเป็นชุดอะไร$meta['post_tag|category']ที่คุณจะได้รับการประกาศดัชนีไม่ได้กำหนดเป็นอย่างดี (WP 4.2.2, btw)
cabgfx

5

ในหน้าเก็บถาวรในการโพสต์วงเพิ่มบรรทัดของรหัสต่อไปนี้เพื่อให้มันทำงาน

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

บอกฉันว่ามันใช้งานได้ดีกับคุณหรือฉันจะให้วิธีแก้ไขปัญหาอื่น


มันไม่ได้ทำงานอย่างน่าเสียดาย มันแสดงชื่อ SEO ของโพสต์แรกในที่เก็บถาวร ฉันจะต้องดำดิ่งลงในฐานข้อมูลเพื่อดูว่าข้อมูลนี้ถูกเก็บไว้ที่ไหน
Mattvic

คุณใช้มันเป็นวงไหม? คุณสามารถแสดงรหัสให้ฉันได้ไหม
Vinod Dalvi

ฉันได้เพิ่มรหัสของฉัน ไม่แน่ใจว่าฉันอธิบายหรือไม่ว่าฉันต้องการแสดงผลชื่อหน้าไม่ใช่ชื่อเรื่องของแต่ละโพสต์ในลูป
Mattvic

นี่คือสิ่งที่ฉันกำลังมองหา แสดงผลหัวเรื่อง SEO ในลูป นอกจากนี้ฉันได้แทนที่ get_the_ID () ด้วย $ post-> ID
gerbz

สิ่งนี้ช่วยชีวิตฉันได้ ดี ..
Mukii kumar

0

รับคีย์เวิร์ด focusสำหรับหมวดหมู่และแท็ก

ในการรับคีย์เวิร์ดโฟกัสของหมวดหมู่หรือแท็กโดยทางโปรแกรมคุณสามารถใช้หนึ่งในสองวิธีต่อไปนี้:

            /** 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'];
                }
            }

นี่เป็นวิธีการที่ไมค์ใช้ในตอนท้ายของโพสต์

หรือ

            /** 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' );
                }
            }

ฉันมักจะชอบวิธีที่สองเพราะวิธีนี้ฉันไม่จำเป็นต้องดึงข้อมูลหรือสนใจเกี่ยวกับการรับตัวเลือกเมตาด้วยตนเอง

ในของfunctions.phpคุณคุณอาจต้องการทดสอบif class_exists( 'WPSEO_Taxonomy_Meta' )แล้วอาจห่อฟังก์ชัน Yoast ไว้ในฟังก์ชันของคุณเองเพื่อความปลอดภัยในกรณีที่คุณเคยหยุดใช้งาน Yoast SEO ลงไป

พื้นหลังบางส่วน

ดังที่ได้กล่าวไว้ในคำถามเดิมบางอย่างเช่นget_post_meta( $tag->term_id, '_yoast_wpseo_focuskw', true);จะไม่ทำงานกับหมวดหมู่และหน้า (มันจะไม่ส่งคืนอะไร)

แล้วทำไมถึงเป็นอย่างนั้น?

นั่นเป็นเพราะสำหรับหมวดหมู่และแท็กคำหลักโฟกัสจะถูกบันทึกไว้ที่อื่นในฐานข้อมูล แทนที่จะถูกบันทึกไว้ในwp_postmetaโต๊ะตามปกติมันถูกฝังไว้ข้างในของwp_optionsโต๊ะเป็นวัตถุ JSON

วิธีการข้างต้นให้เราเข้าถึงค่าเหล่านี้


ท้ายที่สุดถ้าคุณชอบฉันและจำชื่อ taxonomies ไม่ได้ (เช่น: ไม่ชัดเจนว่าทำไมแท็กใช้ taxonomy post_tagและไม่ใช่เพียงtagแค่ตรวจสอบ URL เมื่อคุณแก้ไขหมวดหมู่หรือแท็ก: มันจะแสดง…taxonomy=category…หรือ ชอบ.


0

ตอบรับคีย์เวิร์ดการโฟกัสสำหรับหมวดหมู่และแท็ก

// มันใช้งานได้ดีขอบคุณ
// กับ api ที่เหลือ

รับ / wp-json / wp / v2 / categories? slug =slug_name

plugin.in ใช้วิธีที่ 1

เปลี่ยนสาย

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.