Hooking get_pages()

时间:2013-08-07 作者:Simon

在站点上,这是一个使用get_pages() 制作页面列表。该列表用于创建页面列表以及创建下一页和上一页链接。()http://wordpress.org/plugins/next-page-not-next-post/ )

页面结构使用一些空页面只是为了建立层次结构。这些页面不在导航中,导航由wp_nav_menu(), 但当插件调用时,它们会被登记get_pages()

因此,我想从插件发出的请求中删除这些空白页面。

我的目的是为每个不必要的页面添加一个自定义字段,并使用此自定义字段来选择和删除它们。

我第一次尝试pre_get_posts 签署人:

使用函数收集具有get_pages()

然后将该数组与post__not_inpre_get_posts

但是自从get_pages() 插件启动的不是主查询。

所以我的问题是:是否有一个钩子get_pages() 所以我可以过滤它的结果,从而影响插件的行为?

1 个回复
SO网友:Simon

我找到了方法,但它不适用于我的情况,因为插件使用另一个函数链接到父页面,而不使用get_pages()所以结果很不一致。但过滤器正在工作。

// Get all posts with the meta key \'not_in_menu\'
function get_not_in_menu_posts() {

   $post_ids = wp_cache_get( \'wl_not_in_menu\' );
   if ( false === $post_ids ) {

       $post_ids = array();
       $args=array(
           \'post_type\' => \'page\',
           \'meta_key\' => \'not_in_menu\',
                \'meta_value\' => \'1\'
       );

       $not_in_posts = get_posts( $args );
       if( $not_in_posts ) {
       $post_ids = wp_list_pluck( $not_in_posts, \'ID\' );
   }

   wp_cache_set( \'wl_not_in_menu\', $post_ids );
   }

   // return an array of IDs
   return $post_ids;
}

function exclude_pseudo_page( $posts ) {

   $excluded_posts = get_not_in_menu_posts();

   $shaved_posts = array();

   foreach ( $posts as $this_post ) {

       if ( ! in_array( $this_post->ID, $excluded_posts ) ) {
           $shaved_posts[] = $this_post;
       } 

   }

   return $shaved_posts;
}
if ( ! is_admin() ) {
   add_filter(\'get_pages\', \'exclude_pseudo_page\');
}
请随时发表评论。

结束

相关推荐

Use two different index pages

这link 正在指向我的主目录。我想让我的用户看到~/home/prototype.php 当他们来到我的网站时,请翻页。为了实现这一目标,我在我的网站上设置了以下内容。该目录的htaccess文件:DirectoryIndex /home/prototype.php # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / Rewr