用于显示自定义分类标签云的小部件

时间:2011-02-18 作者:José Pablo Orozco Marín

如何更改默认小部件以显示自定义分类法的标记云?

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

不知道任何,但您可以轻松创建自己的:

<?php 
add_action("widgets_init", array(\'Widget_Custom_tax_tag_cloud\', \'register\'));
class Widget_Custom_tax_tag_cloud {
    function control(){
        echo \'No control panel\';
    }
    function widget($args){
        echo $args[\'before_widget\'];
        echo $args[\'before_title\'] . \'Your widget title\' . $args[\'after_title\'];
        $cloud_args = array(\'taxonomy\' => \'Your taxonomy here\');
        wp_tag_cloud( $cloud_args ); 
        echo $args[\'after_widget\'];
    }
    function register(){
        register_sidebar_widget(\'Widget name\', array(\'Widget_Custom_tax_tag_cloud\', \'widget\'));
        register_widget_control(\'Widget name\', array(\'Widget_Custom_tax_tag_cloud\', \'control\'));
    }
}
?>
只需将“您的小部件标题”更改为您的标题,将“分类法此处”更改为您的分类法名称。

您可以通过在codex

希望这有帮助。

SO网友:random_user_name

这里现有的答案很好,但不幸的是,由于答案的年龄,它不适用于WordPress的新版本。

下面的代码有两种改进:

1-这是WordPress新版本的推荐/最佳实践方法,自version 2.8

2-它允许您通过仪表板小部件界面选择分类法,而不是硬编码。

add_action( \'widgets_init\', \'custom_register_plugin_widget\' );

function custom_register_plugin_widget() {
    register_widget( \'Widget_Custom_Tax_Tag_Cloud\' );
}

/**
 * New "best practice" is to extend the built-in WP_Widget class
 *
 * Class Widget_Custom_tax_tag_cloud
 */
class Widget_Custom_Tax_Tag_Cloud extends WP_Widget {
    function __construct() {
        parent::__construct( \'custom_tax_tag_cloud\', \'Custom Taxonomy Tag Cloud\', array( \'description\' => \'Display a tag cloud for a custom taxonomy.\' ) );
    }

    /**
     * Allows for manipulation, calculation, etc. when saving the widget instance in the dashboard.
     *
     * @param array $new_instance
     * @param array $old_instance
     *
     * @return array
     */
    function update( $new_instance, $old_instance ) {
        return $new_instance;
    }

    /**
     * Echos the widget contents in a sidebar
     *
     * @param array $args - the general widget arguments
     * @param array $instance - the settings for this specific widget
     */
    function widget( $args, $instance ) {
        echo $args[\'before_widget\'];
        echo $args[\'before_title\'] . \'Your widget title\' . $args[\'after_title\'];
        $cloud_args = array( \'taxonomy\' => \'catalogtag\' );
        wp_tag_cloud( $cloud_args );
        echo $args[\'after_widget\'];
    }

    /**
     * Render the "Controls" in the dashboard menu under Appearance => Widgets
     *
     * @param array $instance - the settings for this instance of the widget
     *
     * @return null
     */
    function form( $instance ) {
        $instance = wp_parse_args( (array) $instance, array( \'title\' => \'\', \'taxonomy\' => \'post_tag\' ) );

        // Load the list of taxonomies available
        $taxonomies = get_taxonomies( array( \'public\' => TRUE , \'show_tagcloud\' => TRUE), \'objects\' );

        echo \'<p><label>Title</label><input name="\' . $this->get_field_name( \'title\' ) . \'" id="\' . $this->get_field_id( \'title\' ) . \'" value="\' . esc_attr( $instance[\'title\'] ) . \'" /></p>\';
        echo \'<p><label>Taxonomy</label><select name="\' . $this->get_field_name(\'taxonomy\') . \' id="\' . $this->get_field_id(\'taxonomy\') . \'">\';
        echo \'<option value="">Select Taxonomy...</option>\';
        foreach($taxonomies AS $tax) {
            echo \'<option value="\' . $tax->name . \'"\';
            echo ($tax->name == $instance[\'taxonomy\']) ? \' selected\' : \'\';
            echo \'>\';
            echo ( ! empty($tax->labels->singular_name)) ? $tax->labels->singular_name : $tax->label;
            echo \'</option>\';
        }
        echo \'</select></p>\';
    }
}
虽然从技术上讲,您可以将其添加到主题的函数文件中,但我倾向于将其放在单独的主题文件中(例如widgets.php, 并将该文件包含在函数文件中。

结束

相关推荐

Remove Custom Taxonomy Base

我在WordPress 3.0.4中使用自定义分类法我想知道是否有人知道如何从URL中删除分类库?我见过一些插件,它们可以对类别和标记执行此操作,但不能对自定义分类法执行此操作。例如,我有一个名为“城市”的自定义分类法。我希望我的URL结构是mydomain。com/newyork而不是mydomain。com/城市/纽约是否有我可以使用的功能或东西?