【问题标题】:How to alter Wordpress global post title using php如何使用 php 更改 Wordpress 全局帖子标题
【发布时间】:2018-01-11 05:51:02
【问题描述】:

我知道我可以使用:

global $wp_query;
$wp_query->is_page = true;

例如将全局 is_page 条件设置为 true。

我能否以类似的方式更改全局帖子标题以影响the_title() 返回值?

澄清一下:

我需要使用“虚拟页面”案例,其中没有实际加载任何帖子,我不想使用任何现有的帖子标题。只需为当前全局变量注入一些自定义标题,以便在当前页面上使用 the_title 时得到它。

【问题讨论】:

    标签: php wordpress globals


    【解决方案1】:

    要修改标题,您可以使用 wordpress 的内置钩子:

    function suppress_if_blurb( $title, $id = null ) {
    
        if ( in_category(' blurb', $id ) ) {
            return '';
        }
    
        return $title;
    }
    add_filter( 'the_title', 'suppress_if_blurb', 10, 2 );
    

    https://codex.wordpress.org/Plugin_API/Filter_Reference/the_title

    【讨论】:

    • 也许我不够清楚。我会更新我的问题。我不想更改特定的帖子标题。只是当前页面(不加载任何帖子)the_title 值。
    • “不加载任何帖子”我不明白这一点,wordpress 服务的每个页面都是一个帖子(期望 search.php)
    • 你可以谷歌“Wordpress 虚拟页面”。我只是觉得这个问题不是解释这个话题的地方。
    • 所以我已经阅读了这篇文章 (exratione.com/2016/04/…),如果我理解正确,请不要在自定义模板 php 文件中使用 the_title。 the_title 需要一个 post-Object 来显示标题
    • 我确实需要使用它(长解释)。任何方式都不是答案(我该怎么做?只是不要。)。你可以回答“你做不到”,如果这是真的,这是一个合理的答案,但如果可能的话,我想知道怎么做。要知道我不能这样做我已经知道了:)
    【解决方案2】:

    终于找到了。很高兴它非常简单:) 但是这段代码也会为“假帖子/页面”创建所有其他帖子变量:

    $post_id = -99; // negative ID, to avoid clash with a valid post
    $post = new stdClass();
    $post->ID = $post_id;
    $post->post_title = 'Some title or other';
    $wp_post = new WP_Post( $post );
    wp_cache_add( $post_id, $wp_post, 'posts' );
    global $wp, $wp_query;
    $wp_query->post = $wp_post;
    $wp_query->posts = array( $wp_post );
    $wp_query->queried_object = $wp_post;
    $wp_query->queried_object_id = $post_id;
    $wp_query->is_404=false;
    $wp_query->is_page=true;
    $GLOBALS['wp_query'] = $wp_query;
    $wp->register_globals();
    

    More details here!

    【讨论】:

      猜你喜欢
      • 2022-09-23
      • 1970-01-01
      • 2014-12-03
      • 2015-07-26
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      相关资源
      最近更新 更多