如何在WordPress中按ID提取和显示帖子?

时间:2018-10-27 11:35:35

标签: php wordpress class

所以,我在WordPress中有这个特殊的页面模板。我想用它按ID(我将指定)显示一些帖子。

类似

<?php displayPost(10); ?>

,它将具有帖子缩略图,标题以及我将使用的帖子元数据中的一些值。

搜索并出汗数小时后,这就是我的

<?php
class episodeDetails
{   
    public $id;
    function episodeTitle(){
        $title = get_the_title($this->id);
        $mykey_values = get_post_custom_values( 'episode', $this->id);
        foreach ( $mykey_values as $key => $value ) {
        return $title." : ".value;
        } 
    }
   function episodeImage(){
        return get_the_post_thumbnail_url($this->id);
    }

   function episodeLink(){
        return get_the_permalink($this->id);
    }
    function episodeMp3(){
        $mykey_values = get_post_custom_values( 'enclosure', $this->id);
        foreach ( $mykey_values as $key => $value ) {
       return strtok($value, "\n");
        }  
    }
}

$episode = new episodeDetails;
$episode->id="480";
?>

<div class="list-videos">
<div class="list-videos-image">
<a href="<?php echo $episode->episodeLink(); ?>" title="<?php echo $episode->episodeTitle(); ?>"><img width="404" height="404" src="<?php echo $episode->episodeImage(); ?>" class="attachment-portfolio-thumbnail wp-post-image" alt="<?php echo $episode->episodeTitle(); ?>"></a>
</div>
<div class="list-videos-text">
    <a href="<?php echo $episode->episodeLink(); ?>" rel="bookmark" title="<?php echo $episode->episodeTitle(); ?>!"><?php echo $episode->episodeTitle(); ?></a><br><a class="button" href="<?php echo $episode->episodeLink(); ?>" rel="bookmark"><i class="fas fa-play"></i> Play Now</a> <a class="button" href="<?php echo $episode->episodeMp3(); ?>" download=""><i class="fas fa-download"></i> Download MP3</a>
</div>
</div>

现在,它确实显示了我想要的内容,但我认为可以用更好,更轻松的方式来完成它。我的方式将需要我为每个其他帖子一次又一次地复制并粘贴整个HTML块。我想简化它,我在寻找是否有一种简洁的方法来代替我认为是递归的冗长而复杂的HTML部分。

谢谢

1 个答案:

答案 0 :(得分:1)

要严格回答您的问题:只需使用foreach循环。

// Your class declaration to be put here...

// Then declare your IDs
$episodeIds = array(480, 481, 482, ...);

// And finally loop over them
foreach($episodeIds as $id) {

    $episode = new episodeDetails;
    $episode->id=$id;

    ?><div class="list-videos">
        <div class="list-videos-image">
            <a href="<?php echo $episode->episodeLink(); ?>" title="<?php echo $episode->episodeTitle(); ?>"><img width="404" height="404" src="<?php echo $episode->episodeImage(); ?>" class="attachment-portfolio-thumbnail wp-post-image" alt="<?php echo $episode->episodeTitle(); ?>"></a>
        </div>
        <div class="list-videos-text">
            <a href="<?php echo $episode->episodeLink(); ?>" rel="bookmark" title="<?php echo $episode->episodeTitle(); ?>!"><?php echo $episode->episodeTitle(); ?></a><br><a class="button" href="<?php echo $episode->episodeLink(); ?>" rel="bookmark"><i class="fas fa-play"></i> Play Now</a> <a class="button" href="<?php echo $episode->episodeMp3(); ?>" download=""><i class="fas fa-download"></i> Download MP3</a>
        </div>
    </div><?php
}

或者您可以将代码的模板部分包装在一个函数中(例如您的示例displayPost(...)),然后在循环中调用该函数。

// Your class declaration to be put here...

// The display method gets the $episode object as parameter
function displayPost($episode) {
    ?><div class="list-videos">
        <div class="list-videos-image">
            <a href="<?php echo $episode->episodeLink(); ?>" title="<?php echo $episode->episodeTitle(); ?>"><img width="404" height="404" src="<?php echo $episode->episodeImage(); ?>" class="attachment-portfolio-thumbnail wp-post-image" alt="<?php echo $episode->episodeTitle(); ?>"></a>
        </div>
        <div class="list-videos-text">
            <a href="<?php echo $episode->episodeLink(); ?>" rel="bookmark" title="<?php echo $episode->episodeTitle(); ?>!"><?php echo $episode->episodeTitle(); ?></a><br><a class="button" href="<?php echo $episode->episodeLink(); ?>" rel="bookmark"><i class="fas fa-play"></i> Play Now</a> <a class="button" href="<?php echo $episode->episodeMp3(); ?>" download=""><i class="fas fa-download"></i> Download MP3</a>
        </div>
    </div><?php
}

// Then declare your IDs
$episodeIds = array(480, 481, 482, ...);

// And finally loop over them
foreach($episodeIds as $id) {

    $episode = new episodeDetails;
    $episode->id=$id;
    displayPost($episode);
}