You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress中get_posts()内调用get_the_title()无法获取当前页标题问题

问题原因

你遇到的两个问题根源很明确:

  1. 标题获取错误:setup_postdata( $post )会覆盖WordPress全局的$post对象,你在自定义文章类型的循环内调用无参数的get_the_title(),拿到的自然是循环内的fixtures-results类型文章标题,而非初始的当前页面标题。
  2. 内容输出到顶部:直接在全局作用域执行echo会在页面渲染流程的早期输出内容,自然出现在页头位置;挂载钩子报错大概率是你直接在回调函数内执行输出、变量作用域错误,或者未正确处理返回值导致。

解决步骤

  1. 预存当前页面标题:在执行自定义get_posts查询前,先把当前页面的标题存到临时变量里,不受后续查询影响。
  2. 使用内容过滤器钩子输出:挂载到the_content钩子,把要输出的内容拼到正文内容后面再返回,不要直接echo。
  3. 修正未定义变量:你原代码里的$postID未赋值,属于无效变量。

修正后可直接使用的代码

把下面的代码放到你当前主题的functions.php文件里即可:

add_filter('the_content', 'append_fixtures_results_to_content');
function append_fixtures_results_to_content($content) {
    // 仅在单页面/文章主查询中生效,避免在列表等位置输出
    if (!is_singular() || !in_the_loop()) return $content;

    // 第一步:先预存当前页面的标题,不会被后续查询覆盖
    $current_page_title = get_the_title();
    // 用来拼接输出内容的变量
    $output = '';

    $posts = get_posts(array(
        'numberposts' => 10,
        'post_type' => 'fixtures-results',
        'post_status' => 'publish'
    ));

    if($posts) {
        foreach($posts as $post) {
            setup_postdata( $post );
            // 加空值判断避免报错
            if (!get_field('fixtures_results')) continue;
            $matches  = str_replace("|% ","|%",get_field('fixtures_results'));
            preg_match_all("@[A-z0-9 ./'áàâäãåǻăāąấấặắǎȧạàãáćĉċčççďđḑḋḍdéèêëĕěēęėềẽȩẹéĝ
ğġģǧǵḡĥħȟḣḥḩíìîïĭїĩīįǐĪỊ̣iỊǏĨị̣ịıíĵķǩḱḳļľŀĺĺóòôöõðőŏōỏǒǫȯoøồớòóõöñńņňʼnŋǹṅṇ
ŕŗřṙṛśŝşšṡṣşșţťŧțṫṭtúùûüůūűųũŭǔǘǚǜụuưüúŵŷýÿўỹẏỳỵyẙȳẙźżžẑẓḅḟḿṁṃṕṗṽṿḷẁẃẅẉẘ
ẘẋẍÒÓÔÕÖŐǑǪŌȮØÙÚÛǓǗǙǛŨŮŰŲÜỤŪĆĈČÇÀÁÂÃÄÅẠĄĀȦǍÈÉÊËĖĘĚẸẼĒȨḾṀṂŚŜŞŠṠṢŹŻŽẐẒŃŅŇ
ṄṆÑǸḢḤḨĤȞĹĻĽĿŢŤṪṬŖŘṘṚĜĠĢǦǴḠẀẂẄẈŴḊḌḐĎĐÐṔṖĶǨḰḲẊẌṼṾỴỸỲẎŸȲŶÝĴȷḄḞḶŁłÏÎÍÌıİ
ßıs-]+#[^#]+@", $matches, $countries);

            $results = [];
            foreach ($countries[0] as $c) {
                $c = explode("#", $c);
                $country_name = $c[0];
                // 这里做你要的标题比对逻辑,用预存的当前页面标题比对
                if ($current_page_title === $country_name) {
                    $results[$country_name] = [];
                    $params = explode("%", $c[1]);
                    foreach ($params as $key) {
                        if (!empty($key)) {
                            $test = explode("|", trim($key, '|'));
                            // 把要输出的内容拼到$output变量里,不要直接echo
                            $output .= $country_name . $test[0] . $test[1] . $test[2].'<br>';
                        }
                    }
                }
            }
        }
        wp_reset_postdata();
    }

    // 把自定义内容拼到正文后面返回
    return $content . $output;
}

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:54:07