将类别标题添加到wordpress插件

时间:2016-01-25 11:28:43

标签: php wordpress

我正在使用Wordpress插件将一个类别列表和4个帖子添加到网站的主页。

我想要做的是为每个类别添加标题和“更多”链接,但我无法完全理解。

下面是插件代码,我的新部分在底部附近的注释中突出显示。在那一刻,它只显示前两个类别的标题,然后再次重复相同的标题及其链接,即使类别不同。

<?php
    global $post;

    // default attributes for shortcode
    $shortcode_default_attrs = array(
         'author' => '',
         'show' => 5,
         'excerpt' => 'false',
         'thumbnail' => 'false',
         'post_type' => 'post',
         'category' => '',
         'tag' => ''
    );

    // overrides default attributes set above and separates into individual varaibles.
    if(!empty($inserted_attrs)) {
        extract(shortcode_atts( $shortcode_default_attrs, $inserted_attrs ));
    }

    if(!empty($author)) {

        // checks if there are multiple authors set.
        $author_has_comma = strpos($author, ',');
        if($author_has_comma === false) {

            // gets the author data for a single author.
            $author_data = get_user_by( 'login', $author );

            if(!empty( $author_data)) {
                $post_args = array(
                    'author' => $author_data->ID,
                    'posts_per_page' => $show,
                    'post_type' => $post_type,
                    'category_name' => $category,
                    'tag' => $tag,
                );
            }

        } else {

            // gets the author data for multiple authors.
            $authors = explode(',', $author);
            $author_data = '';
            foreach($authors as $author_login) {
                $author_user = get_user_by('login', $author_login);
                $author_data .= $author_user->ID . ',';
            }

            $post_args = array(
                'author' => $author_data,
                'posts_per_page' => $show,
                'post_type' => $post_type,
                'category_name' => $category,
                'tag' => $tag,
            );
        }
    } elseif (empty($author)) {

        $post_args = array(
            'author' => $author,
            'posts_per_page' => $show,
            'post_type' => $post_type,
            'category_name' => $category,
            'tag' => $tag,
        );
    }

    // gets posts form database
    $post_query = new WP_Query( $post_args );

    // displays posts 
    if($post_query) {
        $data = '';
        $data .= '<div class="recent_post_by_cc"><ul>';
        while ($post_query->have_posts()) : $post_query->the_post();
            $data .= '<li>';



            // displays a link to the post, using the post title
            $data .= '<a href="' . get_permalink() . '" title="' . get_the_title() . '">';
            $data .= get_the_title();
            $data .= '</a>';

            // display a linked featured image if post has
            if($thumbnail == 'true') { 
                $data .= '<div class="cc_left">';
                if(has_post_thumbnail()) { 
                    $data .= '<a href="' . get_permalink() . '" title="' . get_the_title() . '">';
                    $data .= get_the_post_thumbnail(get_the_id(), 'thumbnail');
                    $data .= '</a>';
                }
                $data .= '</div>';
            }



            // displays the post excerpt if "excerpt" has been set to true
            if($excerpt == 'true') {
                $data .= '<p>' . get_the_excerpt() . '</p>';
            }

            $data .= '<div style="clear: both;"></div></li>';
        endwhile;

        // =================================================
        // Start of my added section
        // =================================================

            $data .= '<div class="more-home-link">';
        $category = get_the_category(); 
        $data .= '<a href="'.get_category_link($category[0]->cat_ID).'">More</a>';

        $data .= '</div>';


            $data .= '<div class="home-title">';
            $categories = get_the_category();
         echo '<h2><a href="'.$cat_link.'">'.$categories[0]->cat_name.'</a></h2>' ;
        $data .= '</div>';

        // =================================================
        // End of my added section
        // =================================================

        $data .='</div>';
        $data .= '</ul>';


    }

    wp_reset_postdata();

    echo $data;

2 个答案:

答案 0 :(得分:1)

我认为您为每个类别从此插件中运行了此短代码,并将category_slug传递给短代码,以便能够获得最后4个帖子,因为来自$post_args的这一行:{{1} }。

如果是这样,那么你已经有了当前类别slug,你可以使用'category_name' => $category,获取类别数据然后你可以这样做

get_category_by_slug( $category );

如果你使用这个$curr_cat = get_category_by_slug( $category ); $data .= '<div class="more-home-link">'; $data .= '<a href="'.get_category_link($curr_cat->cat_ID).'">More</a>'; $data .= '</div>'; $data .= '<div class="home-title">'; $data .= '<h2><a href="'.get_category_link($curr_cat->cat_ID).'">'.$curr_cat->cat_name.'</a></h2>' ; $data .= '</div>'; ,并从数组中获取第一个结果,你就无法获得正确的类别,因为一个帖子可以有多个类别,而你只需先选择它们,而不知道它的订单。

因此,您的结果中只显示了两个类别。

此外,更改插件代码并不是一个好习惯,因为这样可以避免以后更新此插件的可能性。因此,更好的方法是使用类别链接创建自己的get_the_category()echo函数,然后在插件的每个短代码后调用它。类似的东西:

return shortcode

答案 1 :(得分:0)

$cat_link

似乎未初始化

也:

$category[0]->cat_name

仅显示第一个元素的名称([0])。这些帖子有多个类别吗?

可能你需要这样的东西:

foreach (get_categories() as $category) {
    echo '<div>..... {$category->cat_name} ....</div>';
}