具有 URL 参数的页面的动态元标题?

Dynamic meta titles for pages with URL parameters?

我有一个名为 /team-page/?id=x 的页面,它是在 WordPress 中构建的

“id”的URL参数决定了该页面上动态显示的内容。但是,该页面的元标题是静态设置的。有没有一种方法可以根据页面内容动态设置元标题? /team-page 的每个变体都有一个独特的 H1 - 理想情况下,我很乐意抓住这个 H1 并将其设置为元标题。

您可以使用 document_title_parts 过滤器来实现。它以 $titles 作为参数,它由两部分组成 - 标题和网站(首页除外 - 而不是网站它的标语)

所以试试这个

add_filter( 'document_title_parts', 'custom_title' );
function custom_title( $title ) {

    // Just to see what is $title
    // echo '<pre>';
    // print_r( $title );
    // echo '</pre>';
    // die();

    $uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ); // get current uri without query params

    // Change meta only on team-page. 
    if ( '/team-page/' === $uri ) {
        // you can do here anything you want
        $title['title'] = get_the_title() . ' and whatever string you want ' . $_GET['id'];
    }
    return $title;
}

此外,如果需要,请不要忘记检查和消毒您的 $_GET['id']

您正在寻找 get_query_var()

Retrieves the value of a query variable in the WP_Query class.

需要了解的一件小事是 get_query_var() 仅检索 WP_Query 识别的 public 查询变量。

所以我们需要先注册我们的变量。这被认为是最佳实践。在 Wordpress 生态系统中,简单地使用 $_GET['id'] 被认为是不安全的

add_filter( 'query_vars', 'wpso66660959_query_vars' );
function wpso66660959_query_vars( $qvars ) {
    $qvars[] = 'ref';
    return $qvars;
};

您还应该使用 id 以外的东西,因为 Wordpress 已经使用它来处理 WP_Query。我使用了 ref(参考),但您可以选择任何不影响 Wordpress 核心的内容。

然后我们可以简单地构建我们的自定义标题。

<?= '<title>' . get_the_title() . ' | Order N° ' . get_query_var( 'ref', 'undifined' ) . '</title>'; ?>

请注意,如果您的主题使用 Wordpress 设置页面标题,您可能需要在 function.php.

中围绕 add_theme_support( 'title-tag' ); 设置某种条件语句

类似...

//...
if ( ! is_page( 'team-page' ) )
    add_theme_support( 'title-tag' );

title-tag 通常包含在您的主题选项中。