排除必须基于与存储在数据库中的页面连接的内容。数据库中存储的唯一与模板相关的内容是视差模板的文件名,它存储在post meta中的键下_wp_page_template
. 您可以查询没有密钥的页面_wp_page_template
, 或者,如果它确实有密钥,则它不等于模板文件的文件名。
$args = array(
\'post_type\' => \'page\',
\'posts_per_page\' => -1,
\'fields\' => \'ids\',
\'meta_query\' => array(
\'relation\' => \'OR\',
array(
\'key\' => \'_wp_page_template\',
\'value\' => \'templates/parallax.php\',
\'compare\' => \'!=\',
),
array(
\'key\' => \'_wp_page_template\',
\'compare\' => \'NOT EXISTS\',
),
),
);
然后,您可以使用此查询的结果来构建自己的菜单,而不是使用
wp_page_menu
. 与下面的其他选项相比,这将在查询数量方面更加有效。。。
编辑-另一个选项是使用视差模板查询所有页面。然后,您可以使用此查询的结果从wp_page_menu
:
$args = array(
\'post_type\' => \'page\',
\'posts_per_page\' => -1,
\'fields\' => \'ids\',
\'meta_query\' => array(
array(
\'key\' => \'_wp_page_template\',
\'value\' => \'templates/parallax.php\',
\'compare\' => \'=\',
)
),
);
$pages_to_exclude = new WP_Query( $args );
wp_page_menu( array(
\'sort_column\' => \'menu_order, post_title\',
\'menu_class\' => \'primary-menu\',
\'exclude\' => implode( \',\', $pages_to_exclude->posts ),
));