代码之家  ›  专栏  ›  技术社区  ›  dankobgd

Wordpress将php和html模板转换为快捷方式

  •  1
  • dankobgd  · 技术社区  · 8 年前

    我想用这个php代码制作一个快捷方式,用css网格显示最近的博客文章。我正在显示每个博客的图片和其他元数据。

    <div class="wrapper">
        <?php $q = new WP_Query( 'posts_per_page=3' ); ?>
    
        <div class="recent-blogs">
          <?php while ( $q->have_posts() ) : $q->the_post(); ?>
    
            <div class="blog-item">
              <h3 class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
    
              <?php $url = wp_get_attachment_url( get_post_thumbnail_id($post->ID), 'thumbnail' ); ?>    
              <img class="image" src="<?php echo $url ?>" />
    
              <div class="avatar"><?php echo get_avatar( get_the_author_meta('ID'), 40); ?></div>
              <div class="author"><?php the_author_posts_link(); ?></div>
              <div class="time"><?php the_time('m.d.y'); ?></div>
              <div class="category"><?php the_category(); ?></div>
              <div class="comments"><?php comments_number(); ?></div>
              <?php the_excerpt(); ?>
            </div>
    
          <?php endwhile; ?>
          <?php wp_reset_postdata(); ?>
    
        </div>    
    </div>
    

    我的php技术很差,我尝试将html连接成一个字符串,但由于循环和所有这些php变量,我总是搞砸。也尝试过使用ob_start()、ob_get_clean()和ob_get_contents(),但由于某些原因,我最终得到了一个无限循环。

    function recent_blogs_grid() {}
    add_shortcode('recent_blogs_grid', 'recent_blogs_grid');
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   dankobgd    8 年前

    我最终解决了这个问题,我不必像下面第一段代码那样,用那种既困难又愚蠢的方式来解决这个问题。

    function recent_blogs_grid() {        
        $q = new WP_Query( 'posts_per_page=3' );
    
        echo '<div class="recent-blogs-wrapper">';
            echo '<div class="recent-blogs-gallery">';
    
            while ( $q->have_posts() ) : $q->the_post();            
                echo '<div class="recent-blogs-item">';
                    echo '<h3 class="blog-title-meta"><a href="';
                    echo the_permalink();
                    echo '">';
                    echo the_title();
                    echo '</a></h3>';
    
                    $url = wp_get_attachment_url( get_post_thumbnail_id($post->ID), 'thumbnail' );
                    echo '<a href="';
                    echo the_permalink();
                    echo '"><img class="blog-image-meta" src="';
                    echo $url;
                    echo '" /></a>'; 
    
                    echo '<div class="blog-metadata-wrapper">';
                        echo '<div class="blog-avatar-meta">';
                        echo get_avatar( get_the_author_meta('ID'), 40);
                        echo '</div>';
    
                        echo '<span class="blog-author-meta">';
                        echo the_author_posts_link();
                        echo '</span>';
    
                        echo '<span class="blog-datetime-meta"><i class="fa fa-clock-o"></i>';
                        echo the_time('m.d.y');
                        echo '</span>';
    
                        echo '<span class="blog-category-meta"><i class="fa fa-tags"></i>';
                        echo the_category();
                        echo '</span>';
    
                        echo '<span class="blog-comments-meta"><i class="fa fa-commenting"></i>';
                        echo comments_number();
                        echo '</span>';
                    echo '</div>';
    
                    echo the_excerpt(); 
    
                    echo '<a class="blog-read-more" href="';
                    echo the_permalink();
                    echo '">Read More</a>';
    
                echo '</div>';
    
            endwhile;
            echo '</div>';
    
        echo '</div>';
        wp_reset_query();
    }
    

    我只是将原始代码粘贴到另一个文件中,然后将其导入到创建快捷方式的函数中。由于我不能编辑我问的原始问题,这是它自己的文件“recent blogs grid shortcode.php”中的原始html内容。

    <div class="recent-blogs-wrapper">
      <?php $q = new WP_Query( 'posts_per_page=3' ); ?>
    
      <div class="recent-blogs-gallery">
    
      <?php while ( $q->have_posts() ) : $q->the_post(); ?>
    
        <div class="recent-blogs-item">
    
          <h3 class="blog-title-meta">
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
          </h3>
    
          <?php $url = wp_get_attachment_url( get_post_thumbnail_id($post->ID), 'thumbnail' ); ?>
    
          <a href="<?php the_permalink(); ?>">
            <img class="blog-image-meta" src="<?php echo $url ?>" />
          </a>
    
          <div class="blog-metadata-wrapper">
            <div class="blog-avatar-meta"><?php echo get_avatar( get_the_author_meta('ID'), 40); ?></div>
            <span class="blog-author-meta"><?php the_author_posts_link(); ?></span>
            <span class="blog-datetime-meta"><i class="fa fa-clock-o"></i><?php the_time('m.d.y'); ?></span>
            <span class="blog-category-meta"><i class="fa fa-tags"></i><?php the_category(); ?></span>
            <span class="blog-comments-meta"><i class="fa fa-commenting"></i><a href="<?php the_permalink(); ?>"><?php comments_number(); ?></a></span>
          </div>
    
          <?php the_excerpt(); ?>
    
          <a class="blog-read-more" href="<?php the_permalink(); ?>">Read More</a>
    
        </div>
      <?php endwhile; ?>
      <?php wp_reset_postdata(); ?>
      </div>          
    </div>
    

    function recent_blogs_grid() {
        require_once('recent-blogs-grid-shortcode.php');
    }
    
    add_shortcode('recent_blogs_grid', 'recent_blogs_grid');
    
    推荐文章