我希望网页标题和摘录以一定的顺序显示在home.php上

时间:2011-06-07 作者:micah

在函数中。php,我添加了以下代码:

add_post_type_support( \'page\', \'excerpt\' );
这允许页面包含摘录。我之所以需要摘录,是因为我只想将包含摘录的页面称为主页上的3个模块之一。

在头版,在我家。php文件,这3个模块将显示我添加了摘录的页面的标题和摘录。在任何时候,应该允许编辑器更改位置或页面,以便任何现有页面理论上都可以成为主页上的模块。

例如,我有一个关于新患者和服务的页面,这三个页面我都在摘录字段中添加了文本(在不需要出现在首页的页面上,我会将所有其他摘录字段留空)。在主页上。php,按照我刚才列出的顺序,我希望每个页面的标题和摘录显示为三列。

以下是我的风格:http://i.stack.imgur.com/jOPb0.png

这3个模块可能需要更改订单或替换为另一个页面,这就是我寻找动态模块的原因。

我创建了两个自定义字段,称为home_widgetorder. home_widget 等于true, 鉴于order 等于它们在页面上的显示顺序。

这段代码是错误的,但我正在寻找类似的逻辑:

<?php
  $pageExcerpt = get_the_excerpt(); 
  if (is_page() && $pageExcerpt !== \'\') {
    the_excerpt();
  }
?>
换句话说,如果某个页面存在并且有摘录,则调用\\u extract(),但按照自定义字段条目定义的顺序执行。这允许根据需要进行动态插入。

我如何编写这段代码才能像我所说的那样工作?

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

起初,威克让我研究WP_Query article on WordPress\'s site. 这是一个非常难以接受的尝试,我在网上搜索了一些文章,可能会给我一个更快的答案,但我找不到任何相关的东西。

这与威克的答案相似但不同,但我只是通过研究上刚刚发布的一篇新文章才弄明白这一点Smashing Magazine on How to Build a Media Site on WordPress. 我仍然希望查询页面是否包含摘录,并只显示该页面,但这是一个很好的过渡解决方案。

<?php
    // Get the pages with excerpts
  $excerpt = new WP_Query(
    array(
        \'post_type\' => \'page\', // Tell WordPress which post type we want
        \'posts_per_page\' => \'3\', // Show the first 3
        \'orderby\' => \'meta_value\', // Order by meta_key, defined on next line
        \'meta_key\' => \'order\', // Look for numerical value in this key
        \'order\' => \'ASC\', // Ascending order
        \'meta_query\' => array( // Return only pages with home_widget meta key set to true
            array(
                \'key\' => \'home_widget\',
                \'value\' => \'true\',
                )
            )
        )
    );
?>

<ul class="excerpt">
    <?php //Start new loop looking for pages only with $excerpt from above 
          while ( $excerpt->have_posts() ) : $excerpt->the_post(); ?>
    <li class="module">
        <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
        <p><?php the_excerpt(); ?></p>
    </li>
    <?php endwhile; ?>
</ul>

SO网友:Wyck

除非您有特定的理由使用meta-box-order值,否则这就太过分了。

取而代之的是放弃页面摘录,添加一个名为“intro\\u content”(或其他任何内容)的元框。

然后在家里。php查询您可以轻松获取此信息,并使用html按您想要的方式进行排序。

例如:

// replace 1, 2, 3, with actual page ID\'s
$about_meta = get_post_meta( 1, \'intro_content\');
$new_patients_meta = get_post_meta( 2, \'intro_content\'); 
$service_meta = get_post_meta( 3, \'intro_content\'); 

// div styles and echo the title + the above or whatever
http://codex.wordpress.org/Function_Reference/get_post_meta

Added this after your comment/edit.

要对元盒进行排序,可以添加另一个具有数值的元盒,或者更好地添加下拉框(例如称为“order\\u value\\u dropdown”)。

这样,您可以在查询中按下拉列表的值查询订单。例如:

 $order_meta = get_post_meta( 3, \'order_value_dropdown\'); 
 if ($order_meta = 1 )
 //grab the intro_content meta from that post
 if ($order_meta = 2 )
 //grab the intro_content meta from that post
 // etc, etc

SO网友:Chip Bennett

一个问题:

在首页的my home.php文件中。”。

这个home.php 模板文件为not 首页模板;相反,它是博客帖子索引模板。首页模板是front-page.php.

你不应该两者都看到is_home()is_page() 回来true 同时

因此,您应该使用front-page.php 作为您的首页模板文件,您应该使用is_front_page() 作为您的条件。

结束