如何过滤为get_permarink()函数的输出

时间:2017-05-17 作者:Picard

我知道如何过滤函数的输出the_permalink - 是这样的:

add_filter(\'the_permalink\', \'my_the_permalink\');
function my_the_permalink($url) {
    return \'http://mysite/my-link/\';
}
当我像这样使用它时,它会起作用:<?PHP the_permalink($id); ?>, 但我想更改返回的链接get_permalink($id) 作用在这种情况下,此过滤器不会影响返回的permalink。

我想用以下方法来抓住它:

add_filter(\'post_link\', \'my_get_permalink\', 10, 3);
function my_get_permalink($url, $post, $leavename=false) {
    return \'http://mysite/my-link/\';
}
但此筛选器不是为get_permalink(). 那么如何更改get_permalink()?

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

请注意post_link 过滤器仅用于post 岗位类型。

对于其他帖子类型,可以使用以下过滤器:

  • post_type_link 对于自定义帖子类型page_link 对于第页attachment_link 对于附件get_permalink()函数实际上是以下对象的包装器:

    • get_post_permalink()
    • get_attachement_link()
    • get_page_link()

      以下是一种创建自定义wpse_link 过滤上述所有情况get_permalink():

      foreach( [ \'post\', \'page\', \'attachment\', \'post_type\' ] as $type )
      {
          add_filter( $type . \'_link\', function ( $url, $post_id, ? bool $sample = null ) use ( $type )
          {
              return apply_filters( \'wpse_link\', $url, $post_id, $sample, $type );
          }, 9999, 3 );
      }
      
      我们现在可以通过以下方式过滤所有案例:

      add_filter( \'wpse_link\', function(  $url, $post_id, $sample, $type )
      {
          return $url;
      }, 10, 4 );
      

SO网友:venoel

我成功地使用了此语句。

add_filter(\'post_type_link\', function ($post_link, $post, $leavename, $sample) {
  if ($post->post_type == \'mycustomposttype\') {
    ...
    $post_link = \'https://my.custom.site\' . $some_uri;
  }
  return $post_link;
}, 999, 4);

结束

相关推荐

Apply_Filters/do_action标记字符限制

做apply_filters/do_action $tag 名称有字符限制吗?如果标记名太长,会有什么问题吗?我这样问是因为我知道WP瞬态的极限为45 characters.仅供参考,这是我指的标签:apply_filters( $tag, ....