[英]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]
短tag
: tag
。 您可以在任何页面上使用此短代码,如下所示:
[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.