如何列出网站内的所有页面(及其模板名称)

时间:2015-01-22 作者:zipzit

我正在开始一个遗留网站的工作,它变得相当混乱。我们当然想把事情收拾干净。该网站有3914个页面条目和27个不同的页面模板。我不骗你。

有一件事非常有用,那就是如果我们可以列出所有页面(按标题)及其附带的模板名称。

我很清楚“列出所有”类型的插件。它们都使用WordPress的核心功能<?php wp_list_pages( $args ); ?> 不幸的是,该函数并没有为从页面中选择不同元素提供太多自由。

我的倾向是评估核心功能,并重新创建自己的模板名称,当然这不是一件容易的任务。

以前有人来过这里吗?非常感谢。

更新:根据Howdy\\u McGee的建议,我一直在尝试使用WordPress的核心功能来实现这一点。我的代码:<?php echo "<ul>"; $query = new WP_Query(); // var_dump($query); while ( $query->have_posts() ) : $query->the_post(); $template_name = get_page_template_slug(); ?> <li>
<?php the_title(); ?> <?php echo " | Template File: ".$template_name; ?> </li> <?php endwhile; ?> </ul>

这是一次失败。$query 返回一个空集。我一直在努力找出正确的$args。

编辑#2:然后是Alexey答案。哇!不真的哇!我被它吓坏了。从未想过直接访问数据库。你给了我一个全新的方法来思考这个WordPress的东西。非常感谢!

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

没有你想象的那么难。尝试以下操作:

global $wpdb;

$sql = "SELECT post_title, meta_value
  FROM $wpdb->posts a
  JOIN $wpdb->postmeta b ON a.ID = b.post_id
  WHERE a.post_type = \'page\'
  AND a.post_status = \'publish\'
  AND b.meta_key = \'_wp_page_template\'
        ";

$pages = $wpdb->get_results($sql);

echo \'<pre>\';
print_r($pages);
echo \'</pre>\';

结束

相关推荐