我想在使用[类别]快捷码时显示类别名称

时间:2019-05-28 作者:CDW

当我在帖子正文中写入[类别]快捷码时,我想显示帖子的类别名称。我正在使用此代码,但只显示数组错误。

对不起,我不是编码专家。也许你可以重新定义我的代码?请

function cat_post() {
    return get_the_category();
}
add_shortcode(\'categorypost\', \'cat_post\');

2 个回复
最合适的回答,由SO网友:filipecsweb 整理而成

将下面的代码放入functions.php 文件:

function register_theme_shortcodes() {
    add_shortcode( \'category\',
        /**
         * category shortcode function.
         *
         * @param array $atts
         *
         * @return string
         */
        function ( $atts ) {
            $atts = shortcode_atts(
                array(
                    \'id\' => \'\',
                ),
                $atts
            );

            /**
             * @var int $id Optional Post ID to get categories from.
             */
            extract( $atts );

            if ( $id ) {
                $post_id = $id;
            } else {
                global $post;

                if ( $post instanceof WP_Post ) {
                    $post_id = $post->ID;
                }
            }

            if ( empty( $post_id ) ) {
                $output = \'\';
            } else {
                $output = [];

                if ( $post_categories = get_the_category() ) {
                    /**
                     * @var WP_Term $category
                     */
                    foreach ( $post_categories as $category ) {
                        // Builds the category name with its link.
                        $output[] = "<a href=\'" . get_term_link( $category->term_id ) . "\'>{$category->name}</a>";

                        // Build just the category name.
                        // $output[] = $category->name;
                    }
                }

                $output = implode( \', \', $output );
            }

            return $output;
        }
    );
}

add_action( \'init\', \'register_theme_shortcodes\' );
确保您注意代码中的注释,因为您可以将类别名称与其链接一起输出,也可以不输出。

如果要打印任何其他帖子的类别,在帖子之外,上述代码还支持以下格式:[category id=1234].

SO网友:Krzysiek Dróżdż

代码的主要问题是注册[categorypost] 快捷码,但您想将其注册为[category].

另一个问题是,您的短代码应该返回HTML代码—短代码的输出。正如你所看到的here, 这个get_the_category 函数返回一个术语数组。

那么如何正确地书写呢

最简单的方法是使用the_category() 模板标记。下面是代码:

function category_shortcode_callback( $atts ) {
    // set default params for the_category
    $a = shortcode_atts( array(
        \'separator\' => \'\',
        \'parents\' => \'\',
        \'post_id\' => false
    ), $atts );

    ob_start();  // start output buffering
    the_category( $a[\'separator\'], $a[\'parents\'], $a[\'post_id\'] );  // print categories
    return ob_get_clean();  // grab the output and return it
}
add_shortcode( \'category\', \'category_shortcode_callback\' );

相关推荐

覆盖WC_ShortCodes类中的静态方法(ShortCode)

我正在尝试覆盖product_categories 来自WooCommerce的短代码,以便我可以向包装器添加其他类[product_categories number=\"0\" parent=\"0\" class=\"container\"] 所以我看了一下WooCommerce code, 并创建了一个扩展WC_Shortcodes 我只是复制了静态方法product_categories /** * Updated product categories shortcod