0

私は WP を使用しており、画像をクリックすると、単一の投稿コンテンツが .load() を使用して読み込まれるスクリプトがあります。各投稿をナビゲートするための矢印は、.load() を使用してロードされている .project div 内にあります。

問題は、最初と最後の投稿で、特定の矢印のみを表示したいことです。

たとえば、投稿の最初の項目が読み込まれます。以前の投稿がないため、「前」の矢印は表示されません。最後の投稿と「次」の矢印と同じです。

したがって、基本的にこれを回避するために、現在の投稿がカスタム投稿タイプの最後の投稿なのか最初の投稿なのかを知るために、PHP ステートメントを作成しようとしています (ループに入ることはありません)。

これが私がこれまでに持っているものです.ループ外の最初の投稿と最後の投稿のIDを取得する方法がわかりません。それ以外はすべてテスト済みで動作します。以下は、ほとんどのコードの背後にある「ロジック」です。

<?php
// Get other posts in post type
$next_post = get_next_post();
$previous_post = get_previous_post();
$current_id = get_the_ID();

// Get ID's of posts
$next_id = $next_post->ID;
$previous_id = $previous_post->ID;

// if($next_id == $previous_id) because on first/last posts, get_next_post
// and get_previous_post return the same value.
if($next_id == $previous_id) {
    if() { 
        // if last post in custom post type
    } else() {
        // if first post in custom post type
    }
}
?>

<?php if(isnt first post) { ?>
    <li class="left" data-projectid="<?php echo $next_id; ?>"></li>
<?php } ?>
<li class="grid"></li>
<?php if(isnt last post) { ?>
    <li class="right" data-projectid="<?php echo $previous_id; ?>"></li>
<?php } ?>
4

2 に答える 2

1

私は WP をあまり扱っていませんが、WP テンプレートはすべて PHP ファイルであり、WP は独自の API をユーザーに公開しているため、それらの中で任意の PHP 構文を使用できます。ページをナビゲートするたびに 2 つのクエリを実行することを気にしない場合は、これを理解するのに役立ちます。

<?php

global  $wpdb;
$last_one = FALSE;
$first_one = FALSE;

// Get last one
$last_result = $wpdb->get_results("SELECT `id` FROM `posts` ORDER BY `id` DESC LIMIT 0, 1", ARRAY_A);
if($last_result){ if($last_result['id'] == $next_post){ $last_one = TRUE; } }

// Get first one
$first_result = $wpdb->get_results("SELECT `id` FROM `posts` ORDER BY `id` ASC LIMIT 0, 1", ARRAY_A);
if($first_result){ if($first_result['id'] == $previous_post){ $first_one = TRUE; } }

?>

名前がわからないので、フィールドとテーブルの名前を確認してください。

于 2013-09-26T21:06:26.260 に答える
0

このコードを使用して終了し、正常に動作します...

編集:更新されたコード..何らかの理由で他の誰かがそれを必要とする場合:

$args = array('post_type'=>'your_post_type', 'posts_per_page' => -1);
$posts = get_posts($args);
$first_id = $posts[0]->ID; // To get ID of first post in custom post type 
// outside of loop


$last_id = end($posts);
echo $last_id->ID; // To get ID of last post in custom post type outside of loop

if($current_id != $first_id) { ?>
    <li class="left" data-projectid="<?php echo $previous_id; ?>"></li>
<?php } ?>
<?php if($current_id != $last_id->ID) { ?>
    <li class="right" data-projectid="<?php echo $next_id; ?>"></li>
<?php } ?>
于 2013-09-26T21:21:39.687 に答える