繁体   English   中英

如何将该PHP代码段转换为Wordpress短代码?

[英]How can I turn this PHP snippet into a Wordpress shortcode?

这是一个音乐网站,其中有多个歌手页面-每个歌手一个页面。 新内容将添加为带有Wordpress标签的帖子,以表示艺术家。 这样一来,我可以在每个艺术家页面上添加一个Wordpress循环,以显示所有用该艺术家的标签过滤的帖子。

我已经使过滤后的循环正常工作,但是不幸的是,该循环当前已在页面模板的HTML中进行了手写,因此只能过滤一个标签。 我不想为每个艺术家创建一个新的页面模板,所以我想将其添加到我的functions.php文件中,而我可以在其中为每个艺术家创建一个新的简码。

这是我的页面模板中的当前代码,该代码使用seefour标记过滤所有帖子的循环:

<?php
query_posts( "tag=seefour" );
if ( have_posts() ) { ?>
  <?php while ( have_posts() ) { ?>
    <?php the_post(); { ?>
    <div class="jd-box">
      <a href="<?php the_permalink(); ?>">
        <?php the_post_thumbnail( ); ?>
        <div class="jd-overlay"></div>
        <div class="jd-overlay-text">
          <?php the_title(); ?>
        </div>
      </a>
    </div>
<?php } ?>
<?php } ?>
<?php } ?>

我假设最好的选择是将其转换为我的functions.php文件中的seefour短代码-如何实现此目的?

额外的问题:从长远来看(30至50名以上的艺术家),这是否可持续?还是会导致大量冗余代码? 接受建议...

PS:我知道这种问题已经得到了解决(从原始PHP开始),但是由于我是从HTML / PHP混合开始(而且我是PHP newb),所以我无法使其正常工作。 因此,我很抱歉再次询问。

首先,永远不要使用query_posts() WordPress的内部功能是创建和维护主要的WordPress周期。 使用它,您可能会以无法预测的方式使站点崩溃。 您应该改用get_posts()WP_Query

要获得自定义的简码,请将以下内容添加到您的functions.php中:

function showtag_shortcode( $atts ) {
    $atts = shortcode_atts( array(
        'tag' => '', // Default value.
    ), $atts );

    $posts = get_posts( 'tag=' . $atts['tag'] );
    if ( $posts ) {
        $output = '';
        foreach ( $posts as $post ) {
            setup_postdata( $post );
            $output .= '<div class="jd-box">';
            $output .= '<a href="' . get_the_permalink( $post ) . '">';
            $output .= get_the_post_thumbnail( $post );
            $output .= '<div class="jd-overlay"></div>';
            $output .= '<div class="jd-overlay-text">';
            $output .= get_the_title( $post );
            $output .= '</div>';
            $output .= '</a>';
            $output .= '</div>';
        }
    } else {
        $output = 'no data';
    }
    wp_reset_postdata();

    return $output;
}

add_shortcode( 'showtag', 'showtag_shortcode' );

此函数使用一个参数创建了[showtag]tagtag 您可以在任何页面上使用此短代码,如下所示:

[showtag tag="seefour"]
[showtag tag="disco"]

等等。您将看到带有相关标签的帖子,以代替您的短代码。

将整个循环放在一个简码中会使它变得混乱,我知道您也可以在Widgets等中使用简码,但是我想那不是您想要的。

如果是这样,最好的选择是使此代码成为页面模板,例如Artist并在URL中传递一个变量,即http://example.com/artist?t=seefour ,然后在页面模板中使用以下代码。

<?php
/**
 * Template Name: Artist
 */

query_posts( "tag=" . $_GET['t'] );
if ( have_posts() ) {
?>
  <?php while ( have_posts() ) { ?>
    <?php the_post(); { ?>
    <div class="jd-box">
      <a href="<?php the_permalink(); ?>">
        <?php the_post_thumbnail( ); ?>
        <div class="jd-overlay"></div>
        <div class="jd-overlay-text">
          <?php the_title(); ?>
        </div>
      </a>
    </div>
<?php
    }
  }
}
?>

它可以用于任何数量的艺术家,完全灵活,因为它依赖于运行时(访问时)提供的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM