Last active
June 17, 2021 11:23
-
-
Save isuke01/4e8e6c149d820fec67385ff995e7377f to your computer and use it in GitHub Desktop.
Fix issue with Wordpres Multisite for Category Order and Taxonomy Terms Order.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
Plugin Name: Category Order and Taxonomy Terms Order | |
Plugin URI: http://www.nsp-code.com | |
Description: Order Categories and all custom taxonomies terms (hierarchically) and child terms using a Drag and Drop Sortable javascript capability. | |
Version: 1.5.7.6 | |
Author: Nsp-Code | |
Author URI: https://www.nsp-code.com | |
Author Email: [email protected] | |
Text Domain: taxonomy-terms-order | |
Domain Path: /languages/ | |
*/ | |
define('TOPATH', plugin_dir_path(__FILE__)); | |
define('TOURL', plugins_url('', __FILE__)); | |
register_deactivation_hook(__FILE__, 'TO_deactivated'); | |
register_activation_hook(__FILE__, 'TO_activated'); | |
function TO_activated( $network_wide ) { | |
if ( is_multisite() && $network_wide) { | |
foreach ( get_sites(['fields'=>'ids']) as $blog_id ) { | |
TO_setup_database_term_order($blog_id); | |
} | |
} else { | |
//run in single site context | |
TO_setup_database_term_order(false); | |
} | |
} | |
/** | |
* During new site creation hook | |
*/ | |
function TO_network_setup( $site, $args ) { | |
if( $site && $site->blog_id ){ | |
$newSiteId = (int) $site->blog_id; | |
if ( is_plugin_active_for_network( 'taxonomy-terms-order/taxonomy-terms-order.php' ) ) { | |
TO_setup_database_term_order($newSiteId); | |
} | |
} | |
} | |
add_action('wp_initialize_site', 'TO_network_setup', 50, 2); | |
/** | |
* DB ALTER function | |
*/ | |
function TO_setup_database_term_order($blog_id = false){ | |
if( $blog_id && is_multisite() ) switch_to_blog($blog_id); | |
global $wpdb; | |
$query = "ALTER TABLE $wpdb->terms ADD `term_order` INT( 4 ) NULL DEFAULT '0'"; | |
$query_check = "SHOW COLUMNS FROM $wpdb->terms LIKE 'term_order'"; | |
$result = $wpdb->query( $query_check ); | |
if ( $result == 0 ){ | |
$wpdb->query($query); | |
}; | |
if( $blog_id && is_multisite() ) restore_current_blog(); | |
} | |
function TO_deactivated() | |
{ | |
} | |
include_once ( TOPATH . '/include/functions.php' ); | |
include_once ( TOPATH . '/include/addons.php' ); | |
add_action( 'plugins_loaded', 'to_load_textdomain'); | |
function to_load_textdomain() | |
{ | |
load_plugin_textdomain('taxonomy-terms-order', FALSE, dirname( plugin_basename( __FILE__ ) ) . '/languages'); | |
} | |
add_action('admin_print_scripts', 'TO_admin_scripts'); | |
function TO_admin_scripts() | |
{ | |
wp_enqueue_script('jquery'); | |
wp_enqueue_script('jquery-ui-sortable'); | |
$myJsFile = TOURL . '/js/to-javascript.js'; | |
wp_register_script('to-javascript', $myJsFile); | |
wp_enqueue_script( 'to-javascript'); | |
} | |
add_action('admin_print_styles', 'TO_admin_styles'); | |
function TO_admin_styles() | |
{ | |
$myCssFile = TOURL . '/css/to.css'; | |
wp_register_style('to.css', $myCssFile); | |
wp_enqueue_style( 'to.css'); | |
} | |
add_action('admin_menu', 'TOPluginMenu', 99); | |
function TOPluginMenu() | |
{ | |
include (TOPATH . '/include/interface.php'); | |
include (TOPATH . '/include/terms_walker.php'); | |
include (TOPATH . '/include/options.php'); | |
add_options_page('Taxonomy Terms Order', '<img class="menu_tto" src="'. TOURL .'/images/menu-icon.png" alt="" />' . __('Taxonomy Terms Order', 'taxonomy-terms-order'), 'manage_options', 'to-options', 'to_plugin_options'); | |
$options = tto_get_settings(); | |
if(isset($options['capability']) && !empty($options['capability'])) | |
$capability = $options['capability']; | |
else if (is_numeric($options['level'])) | |
{ | |
//maintain the old user level compatibility | |
$capability = tto_userdata_get_user_level(); | |
} | |
else | |
{ | |
$capability = 'manage_options'; | |
} | |
//put a menu within all custom types if apply | |
$post_types = get_post_types(); | |
foreach( $post_types as $post_type) | |
{ | |
//check if there are any taxonomy for this post type | |
$post_type_taxonomies = get_object_taxonomies($post_type); | |
foreach ($post_type_taxonomies as $key => $taxonomy_name) | |
{ | |
$taxonomy_info = get_taxonomy($taxonomy_name); | |
if (empty($taxonomy_info->hierarchical) || $taxonomy_info->hierarchical !== TRUE) | |
unset($post_type_taxonomies[$key]); | |
} | |
if (count($post_type_taxonomies) == 0) | |
continue; | |
if ($post_type == 'post') | |
add_submenu_page('edit.php', __('Taxonomy Order', 'taxonomy-terms-order'), __('Taxonomy Order', 'taxonomy-terms-order'), $capability, 'to-interface-'.$post_type, 'TOPluginInterface' ); | |
elseif ($post_type == 'attachment') | |
add_submenu_page('upload.php', __('Taxonomy Order', 'taxonomy-terms-order'), __('Taxonomy Order', 'taxonomy-terms-order'), $capability, 'to-interface-'.$post_type, 'TOPluginInterface' ); | |
else | |
add_submenu_page('edit.php?post_type='.$post_type, __('Taxonomy Order', 'taxonomy-terms-order'), __('Taxonomy Order', 'taxonomy-terms-order'), $capability, 'to-interface-'.$post_type, 'TOPluginInterface' ); | |
} | |
} | |
add_filter('terms_clauses', 'TO_apply_order_filter', 10, 3); | |
function TO_apply_order_filter( $clauses, $taxonomies, $args) | |
{ | |
if ( apply_filters('to/get_terms_orderby/ignore', FALSE, $clauses['orderby'], $args) ) | |
return $clauses; | |
$options = tto_get_settings(); | |
//if admin make sure use the admin setting | |
if (is_admin()) | |
{ | |
//return if use orderby columns | |
if (isset($_GET['orderby']) && $_GET['orderby'] != 'term_order') | |
return $clauses; | |
if ( $options['adminsort'] == "1" && (!isset($args['ignore_term_order']) || (isset($args['ignore_term_order']) && $args['ignore_term_order'] !== TRUE) ) ) | |
$clauses['orderby'] = 'ORDER BY t.term_order'; | |
return $clauses; | |
} | |
//if autosort, then force the menu_order | |
if ($options['autosort'] == "1" && (!isset($args['ignore_term_order']) || (isset($args['ignore_term_order']) && $args['ignore_term_order'] !== TRUE) ) ) | |
{ | |
$clauses['orderby'] = 'ORDER BY t.term_order'; | |
} | |
return $clauses; | |
} | |
add_filter('get_terms_orderby', 'TO_get_terms_orderby', 1, 2); | |
function TO_get_terms_orderby($orderby, $args) | |
{ | |
if ( apply_filters('to/get_terms_orderby/ignore', FALSE, $orderby, $args) ) | |
return $orderby; | |
if (isset($args['orderby']) && $args['orderby'] == "term_order" && $orderby != "term_order") | |
return "t.term_order"; | |
return $orderby; | |
} | |
add_action( 'wp_ajax_update-taxonomy-order', 'TOsaveAjaxOrder' ); | |
function TOsaveAjaxOrder() | |
{ | |
global $wpdb; | |
if ( ! wp_verify_nonce( $_POST['nonce'], 'update-taxonomy-order' ) ) | |
die(); | |
$data = stripslashes($_POST['order']); | |
$unserialised_data = json_decode($data, TRUE); | |
if (is_array($unserialised_data)) | |
foreach($unserialised_data as $key => $values ) | |
{ | |
//$key_parent = str_replace("item_", "", $key); | |
$items = explode("&", $values); | |
unset($item); | |
foreach ($items as $item_key => $item_) | |
{ | |
$items[$item_key] = trim(str_replace("item[]=", "",$item_)); | |
} | |
if (is_array($items) && count($items) > 0) | |
foreach( $items as $item_key => $term_id ) | |
{ | |
$wpdb->update( $wpdb->terms, array('term_order' => ($item_key + 1)), array('term_id' => $term_id) ); | |
} | |
} | |
do_action('tto/update-order'); | |
die(); | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment