0

クライアント用のカスタム 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でこのようなことをしたことはありません。

4

2 に答える 2

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;
        }
        }
于 2011-07-05T04:36:13.727 に答える
0

2 つの日付 (開始日と終了日) の間の投稿を表示したい場合は、最初にカスタム フィールド (またはメタボックス) を追加して、開始日と終了日の 2 つの日付を入力する必要があります。

<?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>';
}

}
?>
于 2011-07-04T08:39:45.340 に答える