我重新设计的主要目标之一是让访问者更容易找到我网站上最受欢迎的信息。毫不奇怪,关于 MooTools、jQuery 和 CSS 的帖子位居榜首。这三个主题有什么共同点?事实上,我为他们每个人提供了一个甜蜜的演示。因此,我着手创建一种简单的方法来检查我的所有演示 – 演示和下载页面。
我可以将我的演示和下载链接指向 “/index.php?s=view+demo” 但这很丑陋——对 SEO 不友好,也不是任何人都会记住的地址。解决方案是创建一个新的页面模板,其行为类似于搜索结果页面,但为我提供了更大的灵活性。
策略
第一步是确定有演示的帖子。如果我今天开始写博客,我会添加一个名为“demo”的自定义字段,并为所有包含演示的帖子赋予值“1”。问题是我有 2 年的帖子,不想向所有包含演示的帖子添加自定义字段。但是,我确实知道我所有演示的标签都是“查看演示”,因此任何包含该字符串的帖子都可能包含演示。 问题已解决:我的自定义查询需要一个搜索参数来查找“view demo”字符串。
WP_查询
WP_Query 是 WordPress 出色的数据库交互类。 WP_Query 以请求字符串或数组的形式接受数十个有用的参数,以获取您需要的帖子(编写原始 MySQL 语句很糟糕)。在制定了策略并研究了 WP_Query 之后,是时候开始了。
页面模板PHP
<?php /* Template Name: Demos and Downloads */ /* helper: does regex */ function get_content_match($regex,$content) { preg_match($regex,$content,$matches); return $matches[1]; } /* list of "view demo" posts */ $paged = (get_query_var('paged')) ? (int) get_query_var('paged') : 1; $demoPosts = new WP_Query('s=view+demo&showposts=10ℴ=desc&post_status=publish&paged='.$paged); ?> <?php get_header(); ?> <h1>Demos & Downloads</h1> <?php while ($demoPosts->have_posts()) : $demoPosts->the_post(); ?> <?php $content = get_the_content(); if(strstr(strtolower($content),'href="https://davidwalsh.name/demo/')): ?> <h1><a href="<?php the_permalink(); ?>"><?php the_title(''); ?></a></h1> <p > <?php $intro = get_content_match('/<p>(.*)<\/p>/isU',$content); $image = get_content_match('/src="(.*)" /isU',$content); $link = strip_tags(get_content_match('/href="http:\/\/davidwalsh.name\/demo\/(.*)">/isU',$content)); if($image) { echo '<img src="'.$image.'" alt="Tutorial Demo" />'; } echo $intro; ?> </p> <div > <a href="<?php the_permalink(); ?>" >Continue Reading »</a> <a href="https://davidwalsh.name/demo/<?php echo $link; ?>" >View Demo</a> </div> <?php endif; ?> <?php endwhile; ?> <div > <div > <a href="/demos/page/<?php echo $paged + 1; ?>">« Older Posts</a> </div> <?php if($paged != 1): ?> <div > <a href="/demos/page/<?php echo $paged - 1; ?>">Newer posts »</a> </div> <?php endif; ?> <div ></div> </div> <!-- <?php trackback_rdf(); ?> --> <?php get_footer(); ?>
请注意,为了在演示部分使用分页,我需要设置自己的 $paged 变量并将其添加到 WP_Query 参数字符串中。其他参数应该是不言自明的。
一旦我有了该页面的帖子,我就会循环抛出每个帖子并使用一些自定义 PHP(您无法在搜索页面上轻松执行)来解析帖子内容并提取支持图像和链接到演示。结果是我的演示和下载页面。
漂亮!不要害怕使用您自己的自定义查询生成的内容创建自定义页面模板。您认为还有其他页面可以使网站变得更好吗?让我知道!