shortcode // get posts by ids

时间:2021-09-23 作者:cobi

我正在寻找一个解决方案,以显示在一个快捷码自定义职位。对于一篇文章来说,这已经按预期工作了,但是我想指定多个ID。比如:[posts id=1、2、3、4]因为我来自前端领域,我缺乏相应地调整功能的方法,希望这里有人能为我提供解决方案。

add_shortcode( \'posts\', \'posts_shortcode\' );
function posts_shortcode($atts) {
    
    $atts = shortcode_atts( array(
        \'id\' => \'\'
    ), $atts );
    
    $post_id = $atts[\'id\'];
    
    $HTML  = \'<div class="posts">\';
    $HTML .= \'<div class="thumb">\' . get_the_post_thumbnail($post_id, \'medium\') . \'</div>\';
    $HTML .= \'<div class="content">\';
    $HTML .= \'<h4>\' . get_the_title($post_id) . \'</h4>\';
    $HTML .= \'<p>\' . get_the_excerpt($post_id) . \'</p>\';
    $HTML .= \'</div>\';
    $HTML .= \'</div>\';
    
    return $HTML; 
}   

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

如果使用此短代码没有问题[posts id="1,2,3,4"], 剩下的唯一一件事就是从id属性创建一个数组并循环它,如下所示。

add_shortcode( \'posts\', \'posts_shortcode\' );
function posts_shortcode($atts) {
    
    $atts = shortcode_atts( array(
        \'id\' => \'\'
    ), $atts );
    
    $HTML  = \'<div class="posts">\';

    foreach (explode(\',\', $atts[\'id\']) as $post_id) {
        // because now we loop all ids and it can be multiple ids
        // it would be best to warp each one in its own container
        $HTML .=\'<div class="post">\';

        $HTML .= \'<div class="thumb">\' . get_the_post_thumbnail($post_id, \'medium\') . \'</div>\';
        $HTML .= \'<div class="content">\';
        $HTML .= \'<h4>\' . get_the_title($post_id) . \'</h4>\';
        $HTML .= \'<p>\' . get_the_excerpt($post_id) . \'</p>\';
        $HTML .= \'</div>\';

        // this is the closing tag for our "post" container
        $HTML. =\'</div>\'; // <div class="post">
    }

    $HTML .= \'</div>\';
    
    return $HTML; 
} 
主容器<div class="posts"> 它的结束标记在循环之外,因为我们只需要它们一次。

我不知道为什么要让包含html的变量都是大写字母,但对于PHP变量,约定都是带下划线的小写字母,没有大写字母
当然,你可以随意使用任何你想要的东西,但我只是想说清楚。

相关推荐

Shortcode to update user meta

我想在前端创建一个按钮,当用户单击时,值;“用户元”;更改“验证”function func_change_validate() { if (is_user_logged_in()) { $current_user = wp_get_current_user(); $new_value = \'validate\'; $updated = update_user_meta( $user_id, \'User_met