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'))
你想要的地方。是的,先生。效果很好。我应该自己想出来的,但是(