如何拥有多个存档小部件,每个类别一个存档小部件(在不同的页面中)?

时间:2013-06-26 作者:toto_tico

在假设此问题重复之前,请阅读整个问题。在尝试了一天的插件和教程之后,我确信没有直接的方法来实现我正在尝试的东西。

基本上,我正在构建一个包含不同组件的站点:Blog, NewsGallery, 它们都是菜单中的项目。我正在尝试为所有这些应用程序提供不同的归档小部件。所以,当我去News 我可以看到我的存档小部件,它只组织News. 同样适用于BlogGallery.

我试过什么了?

  1. get_archives: 没有类别参数get_archive

  2. Categories::

    2.1getarchives_join and getarchives_where 过滤器:只有一个归档文件时,它们工作良好。然后可以修改查询一个存档。Problem: 我需要多个存档

    2.2adding templates, template_include filter and global variable: 这允许我有一个具有相应模板名称的全局变量(category-blog.php, category-news.phpcategory-archive.php). 用这些名字我可以改变getarchives_where 照着Problem: 直到我意识到存档的小部件链接指向mysite.com/2012/02 并使用不同的通用模板存档。php“(有关使用自定义post类型的信息,请参见3)。

    2.3category in permalink and ($_SERVER[\'REQUEST_URI\']): 这比抓住permalink更优雅mysite.com/2012/02 大概是mysite.com/news/2012/02. 然后我可以使用$_SERVER[\'REQUEST_URI\']getarchives_where. Problem: 我不知道如何修改mysite.com/2012/02. 我研究,get_month_linkget_year_link. 没有类别参数。

  3. Using custom post type:: 显然我需要archive-news.php, archive-blog.phparchive-gallery.php 并添加到我的getarchives_where 第2.2节。我撞到了Custom Post Type. 我创建并注册了三种自定义帖子类型:Blog, NewsGallery.

    3.1The has_archive delusion: 参数就在那里,我确信我得到了它。所以我去了新闻档案馆(mysite.com/news) 档案就在那里。它在右侧显示新闻时起作用。The problem: 存档小部件仍显示正常帖子。

    3.2adding the archive templates to the template_include filter and global variable: 这类似于2.2,但archive-blog.phparchive-gallery.php. Problem: 与2.2完全相同。存档的小部件链接指向mysite.com/2012/02 再次使用默认的通用模板“归档”。php’而不是我创建的。

  4. Plugins: 我不想为此使用插件,但我做到了,也没有成功。

    4.1。jquery-archive-list-widget: 几乎可以使用,但它可以使用排除类别,而不是包含类别。Problem: 链接仍然是mysite/2012/20/. 我即将修改此插件,但我仍然

    4.2。我尝试了其他一些,但没有那么成功。

如何根据根据我所在的页面显示的类别/post\\u类型拥有不同的存档小部件?

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

我最终用Wordpress重写找到了答案。整个代码位于末尾,可以粘贴到函数中。php。只有一个参数需要更改$rules = cpt_generate_date_archives(\'news\', $wp_rewrite); news是post\\u类型的名称。因此,我添加了第二行来说明如何拥有两个归档。

该代码还包括以下功能get_cpt_archives( \'news\', true ) 打印(第二个参数)列表(<li> 基于)添加为侧栏。

/**
 * Custom post type date archives
 */

/**
 * Custom post type specific rewrite rules
 * @return wp_rewrite             Rewrite rules handled by Wordpress
 */
function cpt_rewrite_rules($wp_rewrite) {
    $rules = cpt_generate_date_archives(\'news\', $wp_rewrite);
    $rules = cpt_generate_date_archives(\'gallery\', $wp_rewrite);
    $wp_rewrite->rules = $rules + $wp_rewrite->rules;
    return $wp_rewrite;
}
add_action(\'generate_rewrite_rules\', \'cpt_rewrite_rules\');

/**
 * Generate date archive rewrite rules for a given custom post type
 * @param  string $cpt        slug of the custom post type
 * @return rules              returns a set of rewrite rules for Wordpress to handle
 */
function cpt_generate_date_archives($cpt, $wp_rewrite) {
    $rules = array();

    $post_type = get_post_type_object($cpt);
    $slug_archive = $post_type->has_archive;
    if ($slug_archive === false) return $rules;
    if ($slug_archive === true) {
        $slug_archive = $post_type->name;
    }

    $dates = array(
        array(
            \'rule\' => "([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})",
            \'vars\' => array(\'year\', \'monthnum\', \'day\')),
        array(
            \'rule\' => "([0-9]{4})/([0-9]{1,2})",
            \'vars\' => array(\'year\', \'monthnum\')),
        array(
            \'rule\' => "([0-9]{4})",
            \'vars\' => array(\'year\'))
        );

    foreach ($dates as $data) {
        $query = \'index.php?post_type=\'.$cpt;
        $rule = $slug_archive.\'/\'.$data[\'rule\'];

        $i = 1;
        foreach ($data[\'vars\'] as $var) {
            $query.= \'&\'.$var.\'=\'.$wp_rewrite->preg_index($i);
            $i++;
        }

        $rules[$rule."/?$"] = $query;
        $rules[$rule."/feed/(feed|rdf|rss|rss2|atom)/?$"] = $query."&feed=".$wp_rewrite->preg_index($i);
        $rules[$rule."/(feed|rdf|rss|rss2|atom)/?$"] = $query."&feed=".$wp_rewrite->preg_index($i);
        $rules[$rule."/page/([0-9]{1,})/?$"] = $query."&paged=".$wp_rewrite->preg_index($i);
    }
    return $rules;
}

/**
 * Get a montlhy archive list for a custom post type
 * @param  string  $cpt  Slug of the custom post type
 * @param  boolean $echo Whether to echo the output
 * @return array         Return the output as an array to be parsed on the template level
 */
function get_cpt_archives( $cpt, $echo = false )
{
    global $wpdb; 
    $sql = $wpdb->prepare("SELECT * FROM $wpdb->posts WHERE post_type = %s AND post_status = \'publish\' GROUP BY YEAR(wp_posts.post_date), MONTH(wp_posts.post_date) ORDER BY wp_posts.post_date DESC", $cpt);
    $results = $wpdb->get_results($sql);

    if ( $results )
    {
        $archive = array();
        foreach ($results as $r)
        {
            $year = date(\'Y\', strtotime( $r->post_date ) );
            $month = date(\'F\', strtotime( $r->post_date ) );
            $month_num = date(\'m\', strtotime( $r->post_date ) );
            $link = get_bloginfo(\'siteurl\') . \'/\' . $cpt . \'/\' . $year . \'/\' . $month_num;
            $this_archive = array( \'month\' => $month, \'year\' => $year, \'link\' => $link );
            array_push( $archive, $this_archive );
        }

        if( !$echo )
            return $archive;
        foreach( $archive as $a )
        {
            echo \'<li><a href="\' . $a[\'link\'] . \'">\' . $a[\'month\'] . \' \' . $a[\'year\'] . \'</a></li>\';
        }
    }
    return false;
}

结束

相关推荐

WP_LIST_CATEGORIES,将类添加到具有子项的所有列表项

我正在使用wp_list_categories(); 要显示自定义分类法中所有术语的列表,但我需要为具有子级的列表项设置与不具有子级的列表项不同的样式。有没有一种方法,PHP或jQuery,我可以给所有父元素一个特殊的类?

如何拥有多个存档小部件,每个类别一个存档小部件(在不同的页面中)? - 小码农CODE - 行之有效找到问题解决它

如何拥有多个存档小部件,每个类别一个存档小部件(在不同的页面中)?

时间:2013-06-26 作者:toto_tico

在假设此问题重复之前,请阅读整个问题。在尝试了一天的插件和教程之后,我确信没有直接的方法来实现我正在尝试的东西。

基本上,我正在构建一个包含不同组件的站点:Blog, NewsGallery, 它们都是菜单中的项目。我正在尝试为所有这些应用程序提供不同的归档小部件。所以,当我去News 我可以看到我的存档小部件,它只组织News. 同样适用于BlogGallery.

我试过什么了?

  1. get_archives: 没有类别参数get_archive

  2. Categories::

    2.1getarchives_join and getarchives_where 过滤器:只有一个归档文件时,它们工作良好。然后可以修改查询一个存档。Problem: 我需要多个存档

    2.2adding templates, template_include filter and global variable: 这允许我有一个具有相应模板名称的全局变量(category-blog.php, category-news.phpcategory-archive.php). 用这些名字我可以改变getarchives_where 照着Problem: 直到我意识到存档的小部件链接指向mysite.com/2012/02 并使用不同的通用模板存档。php“(有关使用自定义post类型的信息,请参见3)。

    2.3category in permalink and ($_SERVER[\'REQUEST_URI\']): 这比抓住permalink更优雅mysite.com/2012/02 大概是mysite.com/news/2012/02. 然后我可以使用$_SERVER[\'REQUEST_URI\']getarchives_where. Problem: 我不知道如何修改mysite.com/2012/02. 我研究,get_month_linkget_year_link. 没有类别参数。

  3. Using custom post type:: 显然我需要archive-news.php, archive-blog.phparchive-gallery.php 并添加到我的getarchives_where 第2.2节。我撞到了Custom Post Type. 我创建并注册了三种自定义帖子类型:Blog, NewsGallery.

    3.1The has_archive delusion: 参数就在那里,我确信我得到了它。所以我去了新闻档案馆(mysite.com/news) 档案就在那里。它在右侧显示新闻时起作用。The problem: 存档小部件仍显示正常帖子。

    3.2adding the archive templates to the template_include filter and global variable: 这类似于2.2,但archive-blog.phparchive-gallery.php. Problem: 与2.2完全相同。存档的小部件链接指向mysite.com/2012/02 再次使用默认的通用模板“归档”。php’而不是我创建的。

  4. Plugins: 我不想为此使用插件,但我做到了,也没有成功。

    4.1。jquery-archive-list-widget: 几乎可以使用,但它可以使用排除类别,而不是包含类别。Problem: 链接仍然是mysite/2012/20/. 我即将修改此插件,但我仍然

    4.2。我尝试了其他一些,但没有那么成功。

如何根据根据我所在的页面显示的类别/post\\u类型拥有不同的存档小部件?

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

我最终用Wordpress重写找到了答案。整个代码位于末尾,可以粘贴到函数中。php。只有一个参数需要更改$rules = cpt_generate_date_archives(\'news\', $wp_rewrite); news是post\\u类型的名称。因此,我添加了第二行来说明如何拥有两个归档。

该代码还包括以下功能get_cpt_archives( \'news\', true ) 打印(第二个参数)列表(<li> 基于)添加为侧栏。

/**
 * Custom post type date archives
 */

/**
 * Custom post type specific rewrite rules
 * @return wp_rewrite             Rewrite rules handled by Wordpress
 */
function cpt_rewrite_rules($wp_rewrite) {
    $rules = cpt_generate_date_archives(\'news\', $wp_rewrite);
    $rules = cpt_generate_date_archives(\'gallery\', $wp_rewrite);
    $wp_rewrite->rules = $rules + $wp_rewrite->rules;
    return $wp_rewrite;
}
add_action(\'generate_rewrite_rules\', \'cpt_rewrite_rules\');

/**
 * Generate date archive rewrite rules for a given custom post type
 * @param  string $cpt        slug of the custom post type
 * @return rules              returns a set of rewrite rules for Wordpress to handle
 */
function cpt_generate_date_archives($cpt, $wp_rewrite) {
    $rules = array();

    $post_type = get_post_type_object($cpt);
    $slug_archive = $post_type->has_archive;
    if ($slug_archive === false) return $rules;
    if ($slug_archive === true) {
        $slug_archive = $post_type->name;
    }

    $dates = array(
        array(
            \'rule\' => "([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})",
            \'vars\' => array(\'year\', \'monthnum\', \'day\')),
        array(
            \'rule\' => "([0-9]{4})/([0-9]{1,2})",
            \'vars\' => array(\'year\', \'monthnum\')),
        array(
            \'rule\' => "([0-9]{4})",
            \'vars\' => array(\'year\'))
        );

    foreach ($dates as $data) {
        $query = \'index.php?post_type=\'.$cpt;
        $rule = $slug_archive.\'/\'.$data[\'rule\'];

        $i = 1;
        foreach ($data[\'vars\'] as $var) {
            $query.= \'&\'.$var.\'=\'.$wp_rewrite->preg_index($i);
            $i++;
        }

        $rules[$rule."/?$"] = $query;
        $rules[$rule."/feed/(feed|rdf|rss|rss2|atom)/?$"] = $query."&feed=".$wp_rewrite->preg_index($i);
        $rules[$rule."/(feed|rdf|rss|rss2|atom)/?$"] = $query."&feed=".$wp_rewrite->preg_index($i);
        $rules[$rule."/page/([0-9]{1,})/?$"] = $query."&paged=".$wp_rewrite->preg_index($i);
    }
    return $rules;
}

/**
 * Get a montlhy archive list for a custom post type
 * @param  string  $cpt  Slug of the custom post type
 * @param  boolean $echo Whether to echo the output
 * @return array         Return the output as an array to be parsed on the template level
 */
function get_cpt_archives( $cpt, $echo = false )
{
    global $wpdb; 
    $sql = $wpdb->prepare("SELECT * FROM $wpdb->posts WHERE post_type = %s AND post_status = \'publish\' GROUP BY YEAR(wp_posts.post_date), MONTH(wp_posts.post_date) ORDER BY wp_posts.post_date DESC", $cpt);
    $results = $wpdb->get_results($sql);

    if ( $results )
    {
        $archive = array();
        foreach ($results as $r)
        {
            $year = date(\'Y\', strtotime( $r->post_date ) );
            $month = date(\'F\', strtotime( $r->post_date ) );
            $month_num = date(\'m\', strtotime( $r->post_date ) );
            $link = get_bloginfo(\'siteurl\') . \'/\' . $cpt . \'/\' . $year . \'/\' . $month_num;
            $this_archive = array( \'month\' => $month, \'year\' => $year, \'link\' => $link );
            array_push( $archive, $this_archive );
        }

        if( !$echo )
            return $archive;
        foreach( $archive as $a )
        {
            echo \'<li><a href="\' . $a[\'link\'] . \'">\' . $a[\'month\'] . \' \' . $a[\'year\'] . \'</a></li>\';
        }
    }
    return false;
}

相关推荐

Allow user edit widgets

我有一个可以编辑和删除帖子的用户。我想让他也能访问小部件,但不能访问整个外观,如主题更改、菜单,。。。有什么解决办法吗?如果我的英语不好,谢谢你,对不起。