在归档小部件中包含自定义帖子类型

时间:2013-05-19 作者:Boris4ka

我有一个名为“视频”的自定义帖子类型,我想将其包含在Archives小部件(二十一世纪主题中的stock小部件)中。它确实已经出现在存档页面上,但只是不在小部件中。

我已经有了

add_action( \'pre_get_posts\', \'add_my_post_types_to_query\' );
function add_my_post_types_to_query( $query ) {
if ( $query->is_main_query() )
    $query->set( \'post_type\', array( \'post\', \'videos\' ) );
return $query;
}
在函数中。php-我可以将IF语句修改为类似于“IF main query或archive widget query”的语句吗?我该怎么做?

2 个回复
SO网友:birgire

存档小部件正在使用wp_get_archives() 显示存档。

如果您想针对所有wp_get_archives() 函数,您可以使用getarchives_where 用于添加自定义帖子类型的筛选器:

add_filter( \'getarchives_where\', \'custom_getarchives_where\' );
function custom_getarchives_where( $where ){
    $where = str_replace( "post_type = \'post\'", "post_type IN ( \'post\', \'videos\' )", $where );
    return $where;
}
如果只想针对第一个归档小部件,可以尝试

add_action( \'widget_archives_args\', \'custom_widget_archives_args\' );
function custom_widget_archives_args( $args ){
    add_filter( \'getarchives_where\', \'custom_getarchives_where\' );
    return $args;
}
使用

function custom_getarchives_where( $where ){
    remove_filter( \'getarchives_where\', \'custom_getarchives_where\' );
    $where = str_replace( "post_type = \'post\'", "post_type in ( \'post\', \'videos\' )", $where );
    return $where;
}
拆卸过滤器时,防止影响其他零件。

SO网友:Sapiteng

It worked for me:

class CPT_Archives extends WP_Widget
{
    function widget()
    {
        ...

        add_filter(\'getarchives_where\', array($this, \'getarchives_where_filter\'), 10, 2);

        $args = array(
            \'format\' => \'option\',
            \'echo\'   => false,
        );
        $options = wp_get_archives($args);
        $options = str_replace(\'?m=\', \'?post_type=CPT&m=\', $options);

        echo \'<select name="CPT_archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">\';
        echo \'  <option value="">\' . esc_attr( __( \'Select Month\' ) ) . \'</option>\';
        echo $options;
        echo \'</select>\';

        ...

    }

    function getarchives_where_filter($where)
    {
        $where = str_replace( "post_type = \'post\'", "post_type = \'CPT\'", $where );
        return $where;
    }
}
结束

相关推荐

Using tabs in admin widgets

更新:我应该指出,我在插件/主题选项页面上测试了下面的方法,效果非常好。事实上,我还能够包括jQuery cookie插件,以保留页面加载之间的当前选项卡选择(很好!)。当您有多个小部件选项时,尝试向管理小部件添加选项卡以减少表单占用空间。我正在使用WordPress附带的jQuery UI选项卡。以下是我迄今为止在插件中编写的代码。http://pastebin.com/fe4wdBcp当小部件被拖动到小部件区域时,选项卡似乎呈现为OK,但您无法单击查看第二个选项卡。更糟糕的是,如果刷新窗口小部件页面,