Current File : /var/www/e360ban/wp-content/plugins/wp-shortcodes-usuarios/src/cpt.php |
<?php
/**
* Custom post type 'wp_short_usu'
* copyright Enrique J. Ros - enrique@enriquejros.com
*
* @author Enrique J. Ros
* @link https://www.enriquejros.com
* @since 1.0.0
* @package WPShortcodesUsuarios
*
*/
defined ('ABSPATH') or exit;
if (!class_exists ('CPT_WP_Shortcodes_Usuarios')) :
Class CPT_WP_Shortcodes_Usuarios {
const CPT = 'wp_short_usu';
const CACHE_KEY = 'cache_short_usu';
public function __construct () {
$this->crea_cpt();
add_action ('save_post', [$this, 'convierte_shortcode'], 10, 1);
add_filter ('post_updated_messages', [$this, 'mensajes_guardado'], 10, 1);
add_filter ('manage_' . self::CPT . '_posts_columns', [$this, 'datos_columnas'], 10, 1);
add_action ('manage_' . self::CPT . '_posts_custom_column', [$this, 'rellena_datos_columnas'], 10, 2);
add_filter ('post_row_actions', [$this, 'quita_ver'], 10, 1);
add_action ('admin_head', [$this, 'quita_visibilidad'], 10);
add_action ('admin_head-edit.php', [$this, 'cambia_titulo_tabla'], 10);
}
private function crea_cpt () {
$etiquetas = array(
'name' => __('Shortcodes', 'wp-shortcodes-usuarios'),
'singular_name' => __('Shortcode', 'wp-shortcodes-usuarios'),
'menu_name' => __('Shortcodes', 'wp-shortcodes-usuarios'),
'name_admin_bar' => __('Shortcode', 'wp-shortcodes-usuarios'),
'archives' => __('Archivos de shortcodes', 'wp-shortcodes-usuarios'),
'attributes' => __('Atributos de shortcodes', 'wp-shortcodes-usuarios'),
'all_items' => __('Shortcodes', 'wp-shortcodes-usuarios'),
'add_new_item' => __('Añadir shortcode', 'wp-shortcodes-usuarios'),
'add_new' => __('Añadir shortcode', 'wp-shortcodes-usuarios'),
'new_item' => __('Nuevo shortcode', 'wp-shortcodes-usuarios'),
'edit_item' => __('Editar shortcode', 'wp-shortcodes-usuarios'),
'update_item' => __('Actualizar shortcode', 'wp-shortcodes-usuarios'),
'view_item' => __('Ver shortcode', 'wp-shortcodes-usuarios'),
'view_items' => __('Ver shortcodes', 'wp-shortcodes-usuarios'),
'search_items' => __('Buscar shortcode', 'wp-shortcodes-usuarios'),
'not_found' => __('No hay shortcodes', 'wp-shortcodes-usuarios'),
'not_found_in_trash' => __('No hay shortcodes en la papelera', 'wp-shortcodes-usuarios'),
'items_list' => __('Lista de shortcodes', 'wp-shortcodes-usuarios'),
'items_list_navigation' => __('Navegación por lista de shortcodes', 'wp-shortcodes-usuarios'),
'filter_items_list' => __('Filtrar lista de shortcodes', 'wp-shortcodes-usuarios'),
);
$argumentos = array(
'label' => __('Shortcode', 'wp-shortcodes-usuarios'),
'description' => __('Permite crear shortcodes personalizados para mostrar datos de tus usuarios.', 'wp-shortcodes-usuarios'),
'labels' => $etiquetas,
'supports' => ['title'],
'hierarchical' => false,
'public' => false,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 70,
'menu_icon' => 'dashicons-shortcode',
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => false,
'exclude_from_search' => true,
'publicly_queryable' => true,
'capability_type' => 'post',
'register_meta_box_cb' => [$this, 'metabox_shortcode'],
);
register_post_type (self::CPT, $argumentos);
}
public function mensajes_guardado ($mensajes) {
$mensajes[self::CPT] = array(
1 => __('Shortcode actualizado.', 'wp-shortcodes-usuarios'),
4 => __('Shortcode actualizado.', 'wp-shortcodes-usuarios'),
6 => __('Shortcode creado.', 'wp-shortcodes-usuarios'),
7 => __('Shortcode guardado.', 'wp-shortcodes-usuarios'),
);
return $mensajes;
}
public function datos_columnas ($columnas) {
return array(
'cb' => '<input type="checkbox" />',
'title' => __('Shortcode', 'wp-shortcodes-usuarios'),
'dato' => __('Dato a mostrar', 'wp-shortcodes-usuarios'),
'plugin' => __('Plugin / Grupo', 'wp-shortcodes-usuarios'),
'copy' => __('Copy'),
);
}
public function rellena_datos_columnas ($columna, $id) {
switch ($columna) {
case 'plugin':
foreach (Campos_WP_Shortcodes_Usuarios::array_opciones() as $grupo => $opcion) {
foreach ($opcion as $key => $value) {
if (is_array ($dato = get_field ('dato', $id)) && $dato['label'] == $key) {
echo str_replace (':', '', $grupo); //Hay que quitarle los dos puntos del final
return; //Eficiencia++
}
}
}
break;
case 'dato':
foreach (Campos_WP_Shortcodes_Usuarios::array_opciones() as $grupo => $opcion) {
foreach ($opcion as $key => $value) {
if (is_array ($dato = get_field ('dato', $id)) && $dato['label'] == $key) {
echo $value;
return; //Eficiencia++
}
}
}
break;
case 'copy':
printf ('<code>%s</code>', get_the_title($id));
break;
}
}
public function cambia_titulo_tabla () {
global $post;
if (is_object ($post) && self::CPT == get_post_type ($post->ID))
add_filter ('the_title', function ($titulo, $id) {
return sprintf ('[%s]', $titulo);
}, 10, 2);
}
public function metabox_shortcode () {
if (!isset ($_GET['post']))
return;
add_meta_box ('shortcodes_usuarios', __('Shortcode', 'wp-shortcodes-usuarios'), [$this, 'metabox_shortcode_html'], self::CPT, 'normal', 'low');
}
public function metabox_shortcode_html () {
global $post;
printf ('<p><code>[%s]</code></p>', $post->post_title);
}
public static function pide_query ($query_vars = false) {
$query = array(
'post_type' => self::CPT,
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'ID',
'order' => 'DESC',
);
if (!$query_vars) {
if ($cache = wp_cache_get (self::CACHE_KEY))
return $cache;
if ($cpt = new WP_Query($query)) {
wp_cache_set (self::CACHE_KEY, $cpt->posts, '', 3);
return $cpt->posts;
}
}
foreach ($query_vars as $query_var => $valor)
$query[$query_var] = $valor;
if ($cpt = new WP_Query ($query))
return $cpt->posts;
return false;
}
public function convierte_shortcode ($post_id) {
if (defined ('DOING_AUTOSAVE') && DOING_AUTOSAVE) //Evitamos la ejecución en autoguardados
return;
if (!current_user_can ('edit_post', $post_id)) //Seguridad
return;
remove_action ('save_post', [$this, 'convierte_shortcode']); //Evitamos que entre en bucle
$post = get_post ($post_id);
$caracteres = ['à', 'á', 'â', 'ä', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ò', 'ó', 'ô', 'ö', 'ù', 'ú', 'û', 'ü', 'ñ', 'ç', 'À', 'Á', 'Â', 'Ä', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ò', 'Ó', 'Ô', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ñ', 'Ç', ' ', '$', '€', '@', '#', '~', '¬', '?', '¿', '!', '¡', '=', '&', '|', '/', '\\', '\'', 'º', 'ª', '"', '·', '%', '(', ')', '{', '}', ',', '.', ';', ':', '<', '>', '-', '+', '*', '[', ']'];
$sustituye = ['a', 'a', 'a', 'a', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'n', 'c', 'a', 'a', 'a', 'a', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'n', 'c', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '', ''];
if (self::CPT == $post->post_type)
wp_update_post (
array(
'ID' => $post->ID,
'post_title' => strtolower (str_replace ($caracteres, $sustituye, $post->post_title)),
)
);
return;
}
public function quita_ver ($acciones) {
if (get_post_type() == self::CPT) {
unset ($acciones['view']);
unset ($acciones['inline hide-if-no-js']); //Edición rápida
}
return $acciones;
}
public function quita_visibilidad () {
printf ('<style>.post-type-%s div#visibility.misc-pub-section.misc-pub-visibility,.post-type-%s #minor-publishing-actions .preview{display:none}</style>', self::CPT, self::CPT);
}
}
endif;