更新:在我自己需要这个之后,我彻底地修改了它。
目标我想每个get_permalink()
直接调用分页的帖子页面-没有任何例外。至少这是几乎所有其他需要链接到某处的函数所使用的函数,因此它也是最可靠的。
插件的作用是什么?当WP完全加载时,它会跳入,并向the_post
-钩然后检查全局$numpages
(保留帖子的页数)和$pages
(保持立柱通过使用<!--nextpost-->
在内容中)。如果页数不大于1
, 它中止。否则,它会在posts页面中搜索搜索到的字符串。如果找到了,则会设置$link
使用将属性初始化为页面链接_wp_link_page()
. 然后,此链接连接到get_permalink()
.
它的作用是什么
它适用于帖子、页面和;自定义帖子类型
插件每次都是免费的。抓住它,使用它。玩得开心点。
<?php
/**
* Plugin Name: (#31913) Search Results - direct link to page
*/
add_action( \'wp\', array( \'search_direct_page_links\', \'init\' ) );
class search_direct_page_links
{
public static $instance;
public static $s;
public $link;
public static function init()
{
is_null( self :: $instance ) AND self:: $instance = new self;
return self :: $instance;
}
public function __construct()
{
if ( ! is_search() )
return;
is_null( self :: $s ) AND self :: $s = get_query_var( \'s\' );
add_action( \'the_post\', array( $this, \'is_paged\' ) );
}
public function is_paged( $post )
{
global $numpages, $pages;
// reset link:
$this->link = get_permalink();
// Remove filters attached from the last post
foreach ( array( \'post_link\', \'page_link\', \'post_type_link\' ) as $filter )
{
remove_filter( $filter, array( $this, \'alter_link\' ) );
}
if ( 1 >= $numpages )
return;
$target = 1;
foreach ( $pages as $i => $p )
{
if ( is_int( strpos( $p, self :: $s ) ) )
{
$target = absint( $i ) +1;
// Get the link now, as _wp_link_page()
// calls get_permalink() internally,
// which would lead to an endless nested loop.
$this->link = str_replace(
array( \'<a href="\', \'">\' )
,\'\'
,_wp_link_page( $target )
);
}
}
if ( 1 < $target )
{
add_filter( \'post_link\', array( $this, \'alter_link\' ), 10, 3 );
add_filter( \'page_link\', array( $this, \'alter_link\' ), 10, 3 );
add_filter( \'post_type_link\', array( $this, \'alter_link\' ), 10, 4 );
}
}
public function alter_link( $permalink, $post, $leavename, $sample )
{
return $this->link;
}
}