Php 在短代码中显示特定类别中的文章标题(wordPress)
尝试编写第一个短代码,显示特定类别中的所有文章标题。但它并没有显示实际结果,只是显示了简短的代码。 以下是我的子主题的Php 在短代码中显示特定类别中的文章标题(wordPress),php,wordpress,shortcode,Php,Wordpress,Shortcode,尝试编写第一个短代码,显示特定类别中的所有文章标题。但它并没有显示实际结果,只是显示了简短的代码。 以下是我的子主题的functions.php文件中到目前为止的内容: function posts_in_cat() { echo '<ul>'; query_posts('cat=3'); while (have_posts()) : the_post(); echo ('<li><a href="' . the_permalink() . '">' . th
functions.php
文件中到目前为止的内容:
function posts_in_cat() {
echo '<ul>';
query_posts('cat=3'); while (have_posts()) : the_post();
echo ('<li><a href="' . the_permalink() . '">' . the_title() . '</a></li>');
endwhile;
wp_reset_query();
echo '</ul>';
}
add_shortcode( 'display_posts_in_cat', 'posts_in_cat' );
函数在_cat()中发布{
回声“”;
查询_posts('cat=3');而(have_posts()):the_post();
回声(“”);
结束时;
wp_reset_query();
回声“
”;
}
添加快捷码('display_posts_in_cat'、'posts_in_cat');
然后我调用短代码,如so[display\u posts\u in\u cat]
当我尝试了解这一点时,任何帮助都将不胜感激
编辑:我已经让它显示,但链接本身是回声在前面的标题文本。此外,它不会显示超过10个标题,我希望它能显示所有标题。有什么想法吗。。。??谢谢。首先,避免使用
query\u posts()
——这样效率很低。看看这个给瘦子的
此外,短代码不应使用echo
语句。短代码只返回文本。简单地说,WordPress内部有一个PHP,上面写着“当这个特定的短代码输入到编辑器中时,用这个函数返回的文本替换它。”使用echo
可以使您立即将这些语句打印到屏幕上,而不是返回WordPress,这样它就可以继续它的常规过程。更多关于
最后,短码函数需要$atts
作为参数
这么说吧,下面我将如何重写你的函数:
<?php
function posts_in_cat( $atts ) {
$atts = shortcode_atts( array(
'cat' => '',
), $atts );
if ( empty( $atts['cat'] ) ) {
// If category provided, exit early
return;
}
$args = array(
'category' => $atts['cat'],
// Disable pagination
'posts_per_page' => -1
);
$posts_list = get_posts( $args );
if ( empty( $posts_list) ) {
// If no posts, exit early
return;
}
$opening_tag = '<ul>';
$closing_tag = '</ul>';
$post_content = '';
foreach ( $posts_list as $post_cat ) {
$post_content .= '<li><a href="' . esc_url( get_permalink( $post_cat->ID ) ) . '">' . esc_html( get_the_title( $post_cat->ID ) ) . '</a></li>';
}
return $opening_tag . $post_content . $closing_tag;
}
add_shortcode( 'display_posts_in_cat', 'posts_in_cat' );
首先,避免使用查询帖子()
——这样效率很低。看看这个给瘦子的
此外,短代码不应使用echo
语句。短代码只返回文本。简单地说,WordPress内部有一个PHP,上面写着“当这个特定的短代码输入到编辑器中时,用这个函数返回的文本替换它。”使用echo
可以使您立即将这些语句打印到屏幕上,而不是返回WordPress,这样它就可以继续它的常规过程。更多关于
最后,短码函数需要$atts
作为参数
这么说吧,下面我将如何重写你的函数:
<?php
function posts_in_cat( $atts ) {
$atts = shortcode_atts( array(
'cat' => '',
), $atts );
if ( empty( $atts['cat'] ) ) {
// If category provided, exit early
return;
}
$args = array(
'category' => $atts['cat'],
// Disable pagination
'posts_per_page' => -1
);
$posts_list = get_posts( $args );
if ( empty( $posts_list) ) {
// If no posts, exit early
return;
}
$opening_tag = '<ul>';
$closing_tag = '</ul>';
$post_content = '';
foreach ( $posts_list as $post_cat ) {
$post_content .= '<li><a href="' . esc_url( get_permalink( $post_cat->ID ) ) . '">' . esc_html( get_the_title( $post_cat->ID ) ) . '</a></li>';
}
return $opening_tag . $post_content . $closing_tag;
}
add_shortcode( 'display_posts_in_cat', 'posts_in_cat' );
请尝试以下操作:
function posts_in_cat() { ?>
<ul class="posts">
<?php query_posts('cat=3&showposts=50'); while (have_posts()) : the_post();
?>
<li><a href='<?php the_permalink() ?>'><?php the_title(); ?></a></li>
<?php endwhile; ?>
<?php wp_reset_query(); ?>
</ul>
<?php
}
add_shortcode( 'display_posts_in_cat', 'posts_in_cat' );
函数在\u cat()中发布\u{?>
请试试这个:
function posts_in_cat() { ?>
<ul class="posts">
<?php query_posts('cat=3&showposts=50'); while (have_posts()) : the_post();
?>
<li><a href='<?php the_permalink() ?>'><?php the_title(); ?></a></li>
<?php endwhile; ?>
<?php wp_reset_query(); ?>
</ul>
<?php
}
add_shortcode( 'display_posts_in_cat', 'posts_in_cat' );
函数在\u cat()中发布\u{?>
很棒的Leland。非常感谢。我有两个后续问题:1)出于某种原因,它只显示前5个,而我希望它们都显示出来。2.)如果我想在类别id的前端添加一个参数,它会将该参数传递给函数以显示该类别的标题,请告诉我该怎么做。。。??[display_posts_in_cat=“3”]
谢谢你,先生。这样做了。Leland,对不起。我完全搞错了。我怎么能在顶部显示类别名称…?这似乎是应该做的,因为用户需要知道他们正在查看的类别。嘿,只需使用获取类别名称($atts['cat'))
你想要的地方。是的,先生。效果很好。我本应该自己解决的,但是……:(太棒了,利兰。非常感谢。我有两个后续问题:1)由于某些原因,它只显示前5个,而我希望它们都显示出来。2.)如果我想在前端为类别id添加一个参数,它会将该参数传递给函数以显示该类别的标题,请告诉我该怎么做…?[display_posts_in_cat=“3”]
谢谢你,先生。就这样。利兰,对不起。我完全搞错了。我如何在顶部显示类别名称…?这似乎是应该做的,因为用户需要知道他们正在查看的类别。嘿,只需使用获取类别名称($atts['cat'))
你想要的地方。是的,先生。效果很好。我应该自己想出来的,但是(