php 有没有办法使用Yoast变量在页面中获取Yoast title?(例如%%title%%)

zengzsys  于 2023-01-24  发布在  PHP
关注(0)|答案(6)|浏览(198)

我需要创建一个函数,这样我就可以在WordPress常规页面之外的任何页面中使用它。我的意思是wp_head()不会放在那里。我需要它的目的。
目的是为AMP(ampproject.org)的网页,我不能使用任何CSS或JavaScript。这就是为什么我需要这个;我需要在wp_title()处放置一个函数,以便Yoast标题放置在那里。
我需要这样的东西:

function yoastVariableToTitle($variable){
    return yoast_vaialble_to_show_title($variable);
}
dvtswwa3

dvtswwa31#

默认情况下,Yoast采用%%title%% %%page%% %%sep%% %%sitename%%,并存储在_yoast_wpseo_title键下的wp_postmeta表中。

仅获取页面/帖子的标题:

function yoastVariableToTitle($post_id) {
    $yoast_title = get_post_meta($post_id, '_yoast_wpseo_title', true);
    $title = strstr($yoast_title, '%%', true);
    if (empty($title)) {
        $title = get_the_title($post_id);
    }
    return $title;
}

可以有2个可能性与 * 搜索引擎优化标题 *

案例一:管理员输入%%title%% %%page%% %%sep%% %%sitename%%在 * 搜索引擎优化标题 * 字段,然后上述代码将返回后/页 * 默认标题 *。
案例二:管理员在 *SEO标题 * 字段中输入My Custom Title %%page%% %%sep%% %%sitename%%,然后上面的代码将返回 * 我的自定义标题 *。
要获取页面/帖子的完整 meta标题:

function yoastVariableToTitle($post_id) {

    $yoast_title = get_post_meta($post_id, '_yoast_wpseo_title', true);
    $title = strstr($yoast_title, '%%', true);
    if (empty($title)) {
        $title = get_the_title($post_id);
    }
    $wpseo_titles = get_option('wpseo_titles');

    $sep_options = WPSEO_Option_Titles::get_instance()->get_separator_options();
    if (isset($wpseo_titles['separator']) && isset($sep_options[$wpseo_titles['separator']])) {
        $sep = $sep_options[$wpseo_titles['separator']];
    } else {
        $sep = '-'; //setting default separator if Admin didn't set it from backed
    }

    $site_title = get_bloginfo('name');

    $meta_title = $title . ' ' . $sep . ' ' . $site_title;

    return $meta_title;
}

希望这有帮助!

rks48beu

rks48beu2#

你的决定很困难。我有个更简单的解决办法:

function get_post_title( WP_Post $post ): string {
    $yoast_title = get_post_meta( $post->ID, '_yoast_wpseo_title', true );
    if ( empty( $yoast_title ) ) {
        $wpseo_titles = get_option( 'wpseo_titles', [] );
        $yoast_title  = isset( $wpseo_titles[ 'title-' . $post->post_type ] ) ? $wpseo_titles[ 'title-' . $post->post_type ] : get_the_title();
    }

    return wpseo_replace_vars( $yoast_title, $post );
}

关于描述:

function get_post_description( WP_Post $post ): string {
    $yoast_post_description = get_post_meta( $post->ID, '_yoast_wpseo_metadesc', true );
    if ( empty( $yoast_post_description ) ) {
        $wpseo_titles           = get_option( 'wpseo_titles', [] );
        $yoast_post_description = isset( $wpseo_titles[ 'metadesc-' . $post->post_type ] ) ? $wpseo_titles[ 'metadesc-' . $post->post_type ] : '';
    }

    return wpseo_replace_vars( $yoast_post_description, $post );
}
1l5u6lss

1l5u6lss3#

从Yoast 14.0开始,这就简单多了。你可以用下面的代码来获取当前页面的标题:

YoastSEO()->meta->for_current_page()->title;

来源:https://developer.yoast.com/blog/yoast-seo-14-0-using-yoast-seo-surfaces/

d6kp6zgx

d6kp6zgx4#

我在我的插件中使用class-frontend.php(yoast的类)中的函数。它在循环之外工作,只需给予它一个post的id:

function convert_yoast_title ($post_id) {
    $string =  WPSEO_Meta::get_value( 'title', $post_id );
    if ($string !== '') {
        $replacer = new WPSEO_Replace_Vars();

        return $replacer->replace( $string, get_post($post_id) );
    } 
    return ''; // if not found - returns empty string
}
cbwuti44

cbwuti445#

您可以:

$title = wp_title( '-', false, '' );
koaltpgm

koaltpgm6#

最后我得到了Raunak Gupta的脚本,为了在主页标题中正确显示博客描述,我不得不修改它。

function yoastVariableToTitle($post_id) {

    $yoast_title = get_post_meta($post_id, '_yoast_wpseo_title', true);
    $title = strstr($yoast_title, '%%', true);
    if ( !is_front_page() ) {
        $title = strstr( $yoast_title, '%%', true );
    } else {
        $title = get_bloginfo( 'description' );
    }
    $wpseo_titles = get_option('wpseo_titles');

    $sep_options = WPSEO_Option_Titles::get_instance()->get_separator_options();
    if (isset($wpseo_titles['separator']) && isset($sep_options[$wpseo_titles['separator']])) {
        $sep = $sep_options[$wpseo_titles['separator']];
    } else {
    $sep = '-'; //setting default separator if Admin didn't set it from backed
    }

    $site_title = get_bloginfo('name');

    $meta_title = $title . ' ' . $sep . ' ' . $site_title;

    return $meta_title;

}

相关问题