这里有很多选择,你想实现什么以及如何实现都取决于你自己。
我的想法是使用可用的模板来避免if else
条件语句。这个Template Hiearchy 提供条款模板,taxonomy-{$taxonomy}-{$term}.php
, 所以你可以为每个学期创建一个tempate。对于红色,您可以创建taxonomy-socks-red.php
.
我知道这将是非常压倒性的,但我认为任何其他方法也是如此
EDIT 1
这里还有一些你可以尝试的东西
我现在没有时间来测试这个,因为我们正在庆祝“国家篮球队”:-)首先,注册一个新的帖子类型,称之为“描述”。您可以保留默认值,以便post type 不可公开查询。请参阅附加的链接,链接到您可以使用的所有参数和参数
function codex_custom_init() {
$args = array(
\'label\' => \'Descriptions\'
);
register_post_type( \'descriptions\', $args );
}
add_action( \'init\', \'codex_custom_init\' );
你现在可以写帖子了,帖子将显示在你的
taxonomy-socks.php
. 从特定术语的标题开始。如果您的帖子针对的是术语
red
, 把你的标题写得像“红色-穿上漂亮的彩色袜子去参加拉姆斯坦音乐会”
使用以下代码this answer 通过@G.M.,您可以按标题名称搜索自定义帖子,如果帖子与您的术语名称匹配,则返回帖子。这将进入您的功能。php
// require PHP 5.3+
add_action( \'posts_where\', function( $where, $query ) {
if ( isset( $query->query[\'name__in\'] ) && is_array( $query->query[\'name__in\'] ) ) {
global $wpdb;
$names = array_filter( array_map( function( $name ) use( $wpdb ) {
$sane = sanitize_title( $name );
return ! empty( $sane ) ? $wpdb->prepare( \'%s\', $sane ) : NULL;
}, $query->query[\'name__in\'] ) );
if ( ! empty( $names ) ) {
$where .= " AND {$wpdb->posts}.post_name IN (" . implode( \',\', $names ) . ")";
}
}
return $where;
}, PHP_INT_MAX, 2 );
您已经获得了当前术语名称,因此这里不需要额外的代码。你会回来的$term->name
到新的name__in
新中的参数WP_Query
. 此查询将位于主循环的正上方$args = array(
\'post_type\' => \'descriptions\',
\'posts_per_page\' => 1,
\'name__in\' => $term->name
);
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
//Show what you need to show
}
}
/* Restore original Post Data */
wp_reset_postdata();
EDIT 2
好的,我已经测试了所有内容,看来@G.M.的代码不适合这份工作。然而,我已经用我不久前从@birgire在他的一篇文章中找到的以下代码进行了测试
answers here. 这更适合这份工作
因此,您需要进行相应的更改,下面是如何
您仍将注册自定义帖子类型descriptions
(注意,它不能description
) 你还是要写你的特别帖子EDIT 1 标题如所述
将要改变的是我们如何查询帖子。首先,我们要创建一个新的name__like
参数并扩展WP_Query
班这是代码。您还可以链接到@birgire的答案这将进入您的功能。php
class WPSE_Query extends WP_Query // thanks @birgire https://wordpress.stackexchange.com/a/136758/31545
{
public function __construct( $args = array() )
{
add_filter( \'posts_where\', array( $this, \'posts_where\' ), 10, 2 );
parent::__construct( $args );
}
public function posts_where( $where, $qry )
{
remove_filter( current_filter(), array( $this, __FUNCTION__ ) );
$name__like = $qry->get( \'name__like\' );
if( ! empty( $name__like ) )
{
$where .= " AND ";
$where .= $GLOBALS[\'wpdb\']->posts;
$where .= ".post_name LIKE \'";
$where .= esc_sql( like_escape( $name__like ) );
$where .= "%\' ";
}
return $where;
}
}
现在我们可以查询帖子了,但我们不打算使用原始帖子
WP_Query
方法,但它的新扩展类,
WPSE_Query
. 因此,新的自定义查询如下所示
$args = array(
\'post_type\' => \'descriptions\',
\'posts_per_page\' => 1,
\'name__like\' => $term->name
);
$the_query = new WPSE_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
//REMEMBER TO CHANGE THIS WITH YOUR LOOP ELEMENTS LIKE
the_title();
}
}
/* Restore original Post Data */
wp_reset_postdata();
希望这正是您想要的