这是一个有多个艺术家页面的音乐网站 - 每位艺术家一页。新内容将添加为带有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位艺术家)还是会造成大量冗余代码?愿意接受建议......
P.S。我知道这个问题已经得到了解答(从原始PHP开始),但由于我开始混合使用HTML / PHP(我是一个PHP新手),我只是无法让它工作。所以我再次向你道歉。
答案 0 :(得分:2)
首先,你永远不应该使用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]
短代码:tag
。您可以在任何页面上使用此短代码,如下所示:
[showtag tag="seefour"]
[showtag tag="disco"]
等。您将拥有包含相关标签的帖子,以代替您的短代码。
答案 1 :(得分:0)
在短代码中放置一个完整的循环会使它变得混乱,我知道你也可以在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
}
}
}
?>
这可以用于任何数量的艺术家,完全灵活,因为它依赖于在运行时(访问时)提供的变量。