created plugin and started tag implementation
This commit is contained in:
commit
3c151eb62b
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
namespace TheaterGF\Core;
|
||||
|
||||
function add_admin_menu() {
|
||||
add_menu_page(
|
||||
'Theatergruppe',
|
||||
'Theatergruppe',
|
||||
'manage_options',
|
||||
'theatergf',
|
||||
'TheaterGF\Core\main_settings_page_callback',
|
||||
);
|
||||
|
||||
add_submenu_page(
|
||||
'theatergf',
|
||||
'General Settings',
|
||||
'General',
|
||||
'manage_options',
|
||||
'theatergf',
|
||||
'TheaterGF\Core\main_settings_page_callback'
|
||||
);
|
||||
}
|
||||
|
||||
function main_settings_page_callback() {
|
||||
echo '<div class="wrap"><h1>Theatergruppe Gänserndorf</h1></div>';
|
||||
}
|
||||
|
||||
|
||||
add_action('admin_menu', 'TheaterGF\Core\add_admin_menu');
|
||||
|
|
@ -0,0 +1,205 @@
|
|||
<?php
|
||||
|
||||
namespace TheaterGF\Core;
|
||||
|
||||
require_once __DIR__ . "/media-meta-box-html.php";
|
||||
|
||||
function build_tag_name( $term ) {
|
||||
|
||||
if (is_array( $term )) {
|
||||
$out = [];
|
||||
|
||||
foreach ( $term as $t ) {
|
||||
$out[] = build_tag_name($t);
|
||||
}
|
||||
sort($out);
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
$parts = [];
|
||||
|
||||
while ( $term && $term->parent != 0 ) {
|
||||
$parts[] = $term->name;
|
||||
$term = get_term($term->parent, 'ttgf_media_tags');
|
||||
}
|
||||
|
||||
if ( $term ) {
|
||||
$parts[] = $term->name;
|
||||
}
|
||||
|
||||
return implode('/', array_reverse($parts));
|
||||
}
|
||||
|
||||
class MediaManager {
|
||||
|
||||
public function __construct() {
|
||||
|
||||
add_action('init', [ $this, 'register_structure' ]);
|
||||
|
||||
add_filter('attachment_fields_to_edit', [ $this, 'create_edit_media_control' ], 10, 2);
|
||||
add_action('add_meta_boxes', [ $this, 'create_tag_management_box' ]);
|
||||
|
||||
// Dont know what it does
|
||||
add_filter( 'update_post_term_count_statuses', function( $statuses, $taxonomy ) {
|
||||
|
||||
if( 'folders' === $taxonomy->name ) {
|
||||
$statuses[] = 'inherit';
|
||||
$statuses = array_unique( $statuses );
|
||||
}
|
||||
return $statuses;
|
||||
|
||||
}, 25, 2 );
|
||||
|
||||
add_action('restrict_manage_posts', [ $this, 'show_list_filter' ]);
|
||||
add_filter('pre_get_posts', [ $this, 'apply_list_filter' ]);
|
||||
}
|
||||
|
||||
public function register_structure() {
|
||||
register_taxonomy('ttgf_media_tags', 'attachment', [
|
||||
'labels' => [
|
||||
'name' => 'Tags',
|
||||
'singular_name' => 'Tag',
|
||||
'search_items' => 'Search tags',
|
||||
'all_items' => 'All tags',
|
||||
'parent_item' => 'Parent tag',
|
||||
'edit_item' => 'Edit tags',
|
||||
'update_item' => 'Update tags',
|
||||
'add_new_item' => 'Add new tag',
|
||||
'new_item_name' => 'New tag name',
|
||||
'menu_name' => 'Tags',
|
||||
],
|
||||
'hierarchical' => true,
|
||||
'public' => false,
|
||||
'show_ui' => false,
|
||||
'show_admin_column' => true,
|
||||
'rewrite' => false,
|
||||
'update_count_callback' => '_update_generic_term_count'
|
||||
]);
|
||||
}
|
||||
|
||||
public function create_tag_management_box() {
|
||||
add_meta_box(
|
||||
'ttgf_media_tags_box',
|
||||
'Tags',
|
||||
[ $this, 'tag_management_meta_box_html' ],
|
||||
'attachment',
|
||||
'side'
|
||||
);
|
||||
}
|
||||
|
||||
public function tag_management_meta_box_html( $post ) {
|
||||
$all_terms = get_terms([
|
||||
'taxonomy' => 'ttgf_media_tags',
|
||||
'hide_empty' => false,
|
||||
]);
|
||||
$all_tags = build_tag_name($all_terms);
|
||||
|
||||
$terms = get_the_terms($post, 'ttgf_media_tags');
|
||||
$tags = build_tag_name($terms);
|
||||
?>
|
||||
<h3>Assigned</h3>
|
||||
|
||||
<div class="ttgf_tags_container">
|
||||
<?php foreach ( $tags as $tag ): ?>
|
||||
<div class="ttgf_tag"><?= $tag ?></div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
public function create_edit_media_control( $fields, $post ) {
|
||||
|
||||
$terms = get_terms([ 'taxonomy' => 'ttgf_media_tags', 'hide_empty' => false ]);
|
||||
|
||||
$fields['ttgf_media_tags'] = [
|
||||
'label' => 'Tags',
|
||||
'input' => 'html',
|
||||
'html' => $this->_build_dropdown("attachments[{$post->ID}][ttgf_media_tags]",
|
||||
array_map(function ($term) { return [ 'value' => $term->id, 'name' => $term->name ]; }, $terms),
|
||||
$post->ID)
|
||||
];
|
||||
|
||||
$fields['ttgf_media_hidden'] = [
|
||||
'label' => 'Folder Attributes',
|
||||
'input' => 'html',
|
||||
'html' => "<select name='attachments[{$post->ID}][ttgf_media_hidden]'><option></option><option value='hidden'>Hidden</option></select>"
|
||||
];
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
public function show_list_filter() {
|
||||
global $typenow;
|
||||
|
||||
if ( $typenow !== 'attachment' ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$selected = isset( $_GET[ 'ttgf_media_folder' ] ) ? $_GET[ 'ttgf_media_folder' ] : false;
|
||||
wp_dropdown_categories([
|
||||
'show_option_all' => 'All folders',
|
||||
'taxonomy' => 'ttgf_media_folder',
|
||||
'name' => 'ttgf_media_folder',
|
||||
'orderby' => 'name',
|
||||
'selected' => $selected,
|
||||
'hierarchical' => true,
|
||||
'value_field' => 'name',
|
||||
'depth' => 3,
|
||||
'hide_empty' => true,
|
||||
]);
|
||||
|
||||
echo '<select name="ttgf_media_folder_filter">';
|
||||
echo '<option>Select Filter</option>';
|
||||
echo '<option value="show_hidden">Display hidden</option>';
|
||||
echo '</select>';
|
||||
|
||||
|
||||
return;
|
||||
|
||||
/*$terms = get_terms([ 'taxonomy' => 'ttgf_media_folder', 'hide_empty' => false ]);
|
||||
|
||||
echo '<select name="ttgf_media_folder_filter">';
|
||||
echo '<option value="">All Folders</option>';
|
||||
|
||||
foreach ( $terms as $term ) {
|
||||
echo "<option value='{$term->slug}'>{$term->name}</option>";
|
||||
}
|
||||
|
||||
echo '</select>';*/
|
||||
}
|
||||
|
||||
public function apply_list_filter( $query ) {
|
||||
if ( ! is_admin() || $query->is_main_query() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!empty($_GET['media_folder_filter'])) {
|
||||
$query->set('tax_query', [[
|
||||
'taxonomy' => 'ttgf_media_folder',
|
||||
'field' => 'name',
|
||||
'terms' => $_GET['ttgf_media_folder'],
|
||||
]]);
|
||||
}
|
||||
|
||||
$show_hidden = isset($_GET['ttgf_media_folder_filter']) && $_GET['ttgf_media_folder_filter'] != "show_hidden";
|
||||
$query->set('meta_query', [[
|
||||
'key' => 'ttgf_media_hidden',
|
||||
'value' => ( ! $show_hidden),
|
||||
'compare' => '!='
|
||||
]]);
|
||||
}
|
||||
|
||||
private function _build_dropdown( $name, $options, $selected, $empty = true ) {
|
||||
|
||||
$html_options = $empty ? '<option></option>' : '';
|
||||
foreach ( $options as $option ) {
|
||||
$html_options .= "<option value='{$option['value']}'" . $selected == $option['value'] ? 'selected' : '' . ">{$option['name']}</option>";
|
||||
}
|
||||
|
||||
return "<select name='$name'>$html_options</select>";
|
||||
}
|
||||
}
|
||||
|
||||
new MediaManager();
|
||||
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
/*
|
||||
* Plugin Name: TheaterGF Core
|
||||
* Description: Gemeinsame Funktionalität für alle TheaterGF Plugins
|
||||
* Author: Patrick Maschek
|
||||
*/
|
||||
|
||||
namespace TheaterGF\Core;
|
||||
|
||||
// protect against direct access
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
function plugin_activation_function() {}
|
||||
|
||||
function plugin_deactivation_function() {}
|
||||
|
||||
register_activation_hook(__FILE__, 'TheaterGF\Core\plugin_activation_function');
|
||||
register_deactivation_hook(__FILE__, 'TheaterGF\Core\plugin_deactivation_function');
|
||||
|
||||
if ( is_admin() ) {
|
||||
require_once __DIR__ . '/src/admin/admin.php';
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/src/media.php';
|
||||
Loading…
Reference in New Issue