/**
  * The Singleton instance.
  *
  * @since 1.0.0
  * @access public
  * @static
  *
  * @return Attachment_Taxonomies_Core The Singleton class instance.
  */
 public static function instance()
 {
     if (null === self::$instance) {
         self::$instance = new self();
     }
     return self::$instance;
 }
Esempio n. 2
0
 public function test_get_terms_for_taxonomy()
 {
     $factory = method_exists('WP_UnitTestCase', 'factory') ? self::factory() : $this->factory;
     $term1 = $factory->term->create(array('taxonomy' => 'attachment_category'));
     $term2 = $factory->term->create(array('taxonomy' => 'attachment_category'));
     $result = Attachment_Taxonomies_Core::instance()->get_terms_for_taxonomy('attachment_category');
     $this->assertCount(2, $result);
     $this->assertEquals($term1, $result[0]->term_id);
     $this->assertEquals($term2, $result[1]->term_id);
 }
    /**
     * Returns the media template output for attachment taxonomy term dropdowns.
     *
     * @since 1.0.0
     * @access private
     *
     * @return string The HTML output for Backbone.
     */
    private function get_taxonomy_media_template_output()
    {
        ob_start();
        foreach (Attachment_Taxonomies_Core::instance()->get_taxonomies('objects') as $taxonomy) {
            $terms = Attachment_Taxonomies_Core::instance()->get_terms_for_taxonomy($taxonomy->name);
            ?>
			<label class="setting attachment-taxonomy-input" data-setting="taxonomy-<?php 
            echo sanitize_html_class($taxonomy->name);
            ?>
-terms">
				<input type="hidden" value="{{ data.taxonomies ? Object.keys(data.taxonomies.<?php 
            echo esc_attr($taxonomy->name);
            ?>
).join(',') : '' }}" />
			</label>
			<label class="setting attachment-taxonomy-select">
				<span class="name"><?php 
            echo esc_html($taxonomy->labels->name);
            ?>
</span>
				<select multiple="multiple">
					<?php 
            if ($taxonomy->hierarchical) {
                ?>
						<?php 
                foreach ($terms as $term) {
                    ?>
							<option value="<?php 
                    echo esc_attr($term->term_id);
                    ?>
" {{ ( data.taxonomies && data.taxonomies.<?php 
                    echo esc_attr($taxonomy->name);
                    ?>
[<?php 
                    echo esc_attr($term->term_id);
                    ?>
] ) ? 'selected' : '' }}><?php 
                    echo esc_html($term->name);
                    ?>
</option>
						<?php 
                }
                ?>
					<?php 
            } else {
                ?>
						<?php 
                foreach ($terms as $term) {
                    ?>
							<option value="<?php 
                    echo esc_attr($term->slug);
                    ?>
" {{ ( data.taxonomies && data.taxonomies.<?php 
                    echo esc_attr($taxonomy->name);
                    ?>
['<?php 
                    echo esc_attr($term->slug);
                    ?>
'] ) ? 'selected' : '' }}><?php 
                    echo esc_html($term->name);
                    ?>
</option>
						<?php 
                }
                ?>
					<?php 
            }
            ?>
				</select>
			</label>
			<?php 
        }
        return ob_get_clean();
    }
 /**
  * Bootstraps the plugin.
  *
  * The textdomain is loaded and actions and filters are hooked in.
  * Furthermore the two custom attachment taxonomies the plugin defines by default are added.
  *
  * @since 1.0.0
  * @access public
  */
 public function bootstrap()
 {
     if ($this->is_mu_plugin) {
         load_muplugin_textdomain('attachment-taxonomies');
     } else {
         load_plugin_textdomain('attachment-taxonomies');
     }
     $core = Attachment_Taxonomies_Core::instance();
     add_action('restrict_manage_posts', array($core, 'render_taxonomy_filters'), 10, 1);
     add_action('wp_enqueue_media', array($core, 'enqueue_script'));
     add_action('wp_enqueue_media', array($core, 'print_styles'));
     $edit = Attachment_Taxonomy_Edit::instance();
     add_action('edit_attachment', array($edit, 'save_ajax_attachment_taxonomies'), 10, 1);
     add_action('add_attachment', array($edit, 'save_ajax_attachment_taxonomies'), 10, 1);
     add_filter('wp_prepare_attachment_for_js', array($edit, 'add_taxonomies_to_attachment_js'), 10, 3);
     add_filter('attachment_fields_to_edit', array($edit, 'remove_taxonomies_from_attachment_compat'), 10, 2);
     add_action('wp_enqueue_media', array($edit, 'adjust_media_templates'));
     /**
      * Filters the taxonomy class names that will be instantiated by default.
      *
      * @since 1.0.2
      *
      * @param array $taxonomy_class_names Array of taxonomy class names.
      */
     $taxonomy_class_names = apply_filters('attachment_taxonomy_class_names', array('Attachment_Category', 'Attachment_Tag'));
     $taxonomy_class_names = array_filter(array_unique($taxonomy_class_names), 'class_exists');
     foreach ($taxonomy_class_names as $class_name) {
         $this->add_taxonomy(new $class_name());
     }
 }