我创建了一个简单的自定义插件,将帖子分为几类:
function custom_category_loop()
{
// Grab all the categories from the database that have posts.
$categories = get_terms( 'category', 'orderby=name&order=ASC');
// Loop through categories
foreach ( $categories as $category )
{
// Display category name
echo '<h2 class="post-title">' . $category->name . '</h2>';
echo '<div class="post-list">';
// WP_Query arguments
$args = array(
'cat' => $category->term_id,
'orderby' => 'term_order',
);
// The Query
$query = new WP_Query( $args );
// The Loop
if ( $query->have_posts() )
{
while ( $query->have_posts() )
{
$query->the_post();
?>
<div><a href="<?php the_permalink();?>"><?php the_title(); ?></a></div>
<?php
} // End while
} // End if
echo '</div>';
// Restore original Post Data
wp_reset_postdata();
} // End foreach
}
add_shortcode( 'my_posts_grouped', 'custom_category_loop' );
然后我创建了一个页面并添加了一行
[my_posts_grouped]
我的WordPress安装是一个多站点安装,所有页面都使用相同的主题,因为我拥有相同的站点,但使用不同的语言(和URL)。
我的问题是,在我所有的网站上,除了一个网站之外,简码都可以正常工作。在仅一个站点上,代码将在正文页内的页眉“ AND”之前输出。
任何想法为何以及如何解决?
答案 0 :(得分:0)
WordPress短代码必须返回数据(而不是使用echo
或类似方法直接打印到屏幕上)。
请注意,由简码调用的函数绝不能产生任何形式的输出。 简码函数应返回文本,该文本将用于替换简码。 直接产生输出会导致意外结果。这类似于过滤器功能的行为,因为它们不应在调用中产生预期的副作用,因为您无法控制它们的位置和时间呼叫。
事实上,您的代码仅在一个网站上而不是在所有网站上都被破坏,我很幸运。
使用return
而不是多个echo
调用的代码的更新版本,这应该可以解决您的问题:
function custom_category_loop()
{
// String to return
$html = '';
// Grab all the categories from the database that have posts.
$categories = get_terms( 'category', 'orderby=name&order=ASC');
// Loop through categories
foreach ( $categories as $category )
{
// Display category name
$html .= '<h2 class="post-title">' . $category->name . '</h2>';
$html .= '<div class="post-list">';
// WP_Query arguments
$args = array(
'cat' => $category->term_id,
'orderby' => 'term_order',
);
// The Query
$query = new WP_Query( $args );
// The Loop
if ( $query->have_posts() )
{
while ( $query->have_posts() )
{
$query->the_post();
$html .= '<div><a href="' . get_permalink() . '">' . get_the_title() . '</a></div>';
} // End while
} // End if
$html .= '</div>';
// Restore original Post Data
wp_reset_postdata();
// Return the HTML string to be shown on screen
return $html;
} // End foreach
}
add_shortcode( 'my_posts_grouped', 'custom_category_loop' );