用于自定义发布类型的PREVIEW_POST_LINK

时间:2015-07-03 作者:andrewheins

我有一个自定义的帖子类型,我希望能够更改预览链接,但据我所知,preview\\u post\\u链接的挂钩只影响默认的帖子类型。

有什么指导吗?

这是我一直在尝试的。

add_filter( \'preview_post_link\', \'append_preview_query_vars\' );

function append_preview_query_vars( $link, $post ) {
    if( $post->post_type === "2016program" ) {
        return $link . "?program_year=2016";
    } else {
        return $link;
    }
}

2 个回复
最合适的回答,由SO网友:birgire 整理而成

这里有两个问题:

#1

你错过了$accepted_args 中的参数:

add_filter( $tag, $callback_function, $priority, $accepted_args );
查看Codex here 了解更多信息。

#2

请注意$link . "?program_year=2016" 是有问题的,因为它给了我们这种联系:

 /?p=123&preview=true?program_year=2016
而是使用add_query_arg( [ \'program_year\' => \'2016\' ], $link ) 我们得到了正确的形式:

/?p=123&preview=true&program_year=2016
更新的代码片段:请尝试以下操作(PHP 5.4+):

add_filter( \'preview_post_link\', function ( $link, \\WP_Post $post )
{
    return \'2016program\' === $post->post_type 
        ? add_query_arg( [ \'program_year\' => \'2016\' ], $link ) 
        : $link;

 }, 10, 2 ); // Notice the number of arguments is 2 for $link and $post
我们使用的位置add_query_arg() 将额外的GET参数附加到链接。

SO网友:Matthias Max

尝试@birgire的解决方案。它对Wordpress 4有效吗。十、

我无法添加任何fot eh preview\\u post\\u链接或preview\\u page\\u链接筛选器。函数jsut不会被命中。

function bitflower_change_post_link($link, $post) {

        //replace www part with server1 using the following php function
        //preg_replace ( patter, replace, subject ) syntax
        // $link = preg_replace(\'/cms/\', \'\', $link);
        $link = $link . \'?testttttt=1\';
        return $link;
}
add_filter(\'preview_post_link\', \'bitflower_change_post_link\', 10, 2);
我尝试了使用10,2参数和不使用。我已经在文件中写入了一个字符串,以查看过滤器是否被命中。没有运气。

Wordpress的官方代码参考至少列出了filter preview\\u post\\u链接。

有什么想法吗?

PS:想发表评论,但没有足够的声誉。

结束

相关推荐

Search with filters and title

我想搜索custom_post 按标题和ACF字段。所以,我用了WP_Query WordPress函数,但我不能按标题过滤,只能按过滤器过滤。当我提交表单时,我有这样的URL:http://example.com/?s=titre&filter1=condition1&filter2=condition2&filter3=condition3 我的代码:$title = $_GET[\'s\']; $args = array( \'pagenam