使用post meta列出帖子内容

时间:2011-07-04 03:44:48

标签: php wordpress meta

我有一个客户端的自定义php页面。本质上,此页面将按post_meta日期(称为open_date)列出帖子。 open_date设置的每个项目还包括2个(open_start)和(open_close)。如果您没有弄明白,这是一个事件类型列表。

最终我所追求的是一个脚本来获取所有帖子与这个元素并按顺序显示它们。以下每个元数值的示例。不确定从哪里开始编写脚本,所以我的代码片段相当缺乏..

例如的 open_date = 12/05/2011 open_start = 12:10 pm open_close = 02:00 pm

到目前为止

和我的剧本

$masterquery = "SELECT * from wp_postmeta WHERE meta_key = 'open_date'";
$masterreslt = mysql_query($masterquery) or die(mysql_error());
while($masterdata = mysql_fetch_array($masterreslt)) {
    $new_array = $masterdata['meta_value'];
    if(!empty($masterdata['meta_value'])) {
        foreach($masterdata as $fullarray) {
            $post_id = $masterdata['post_id'];
            $open_date = $masterdata['open_date'];
            $open_start = $masterdata['open_start'];
            $open_close = $masterdata['open_close'];

            echo $post_id;
            echo '<br>';

            echo $open_date;
            echo '<br>';
        }

正如我所说,相当缺乏并且不太确定从哪里开始。从来没有在WP中做过这样的事情。

2 个答案:

答案 0 :(得分:0)

如果我理解正确你想在两个日期(开始和结束)之间显示帖子 首先,您需要添加一个自定义字段(或元数据),您可以在其中输入两个日期,一个用于开始,一个用于芬兰语。

<?php 
$c = 0; $loop = new WP_Query( array( 'post_type' => <post_type>, 'posts_per_page' => -1, 'post_status' => 'publish', 'orderby' => 'date', 'order' => 'DESC' ));
echo '<ul>';
while ( $loop->have_posts() ) : $loop->the_post(); 
$end = get_post_meta($post->ID, 'end', true); 
$start = get_post_meta($post->ID, 'start', true);
$c++;
$y = strtotime($end); 
$x = strtotime($start);

//echo '<br />';
if ($y < $x) { next; } else {
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php } 
echo '</ul>';
endwhile;

if ($c == 0) { 
echo '<p>None found.</p>';
}

}
?>

答案 1 :(得分:0)

在使用普通PHP编写代码后,我已经完成了这项工作。我确信WP功能可以取代其中的一部分。但它有效,这就是我所需要的。关于lastlist的if语句确保它不会列出重复项,因为在编辑帖子时,这些自定义字段会一次又一次地添加。但是,此查询仅获取每个列表的最新内容。

我的代码:

  <?php
$lastlist = "";
$masterquery = "SELECT * from wp_postmeta WHERE meta_key = 'open_date' ORDER BY meta_value";
$masterreslt = mysql_query($masterquery) or die(mysql_error());
while($masterdata = mysql_fetch_array($masterreslt)) {
    $new_array = $masterdata['meta_value'];
    if(!empty($masterdata['meta_value'])) {
        foreach($masterdata as $fullarray) {
            $post_id = $masterdata['post_id'];

            $property_id = $post_id;

                if($property_id != $lastlist){

                $address = get_post_meta($property_id, 'address', true);

                $open_date = get_post_meta($property_id, 'open_date', true);
                $open_date = date(  "F j, Y", strtotime( $open_date ) );  
                $open_start = get_post_meta($property_id, 'open_start', true);
                $open_close = get_post_meta($property_id, 'open_close', true);
                $image = get_post_meta($property_id, 'red_image1', true);
                $excerpt = get_post($property_id, ARRAY_N);
                $excerpt = $excerpt['5'];
                $permalink = get_permalink( $property_id );

                echo "<div style=\"width:800px;\">";
                echo "<a href=\"$permalink\"><img style=\"width:250px; height:180px; float:left; margin:10px;\" src=\"$image\" /></a>";
                echo "<span style=\"float:right;width:530px;\"><a href=\"$permalink\"><h1>$address</h1></a></span>";
                echo "<span style=\"float:right;width:530px;\"><h2>$open_date $open_start to $open_close</h2></span>";
                echo "<span style=\"float:right;width:530px;\"><p>$excerpt</p></span>";
                echo "</div>";
                echo "<div style=\"clear:both;\">";
                $lastlist = $property_id;
        }
        }