Skip to content

Instantly share code, notes, and snippets.

@cuxaro
Last active September 20, 2024 14:09
Show Gist options
  • Save cuxaro/17101b0214b15d3f9b9d47ba5792f6ea to your computer and use it in GitHub Desktop.
Save cuxaro/17101b0214b15d3f9b9d47ba5792f6ea to your computer and use it in GitHub Desktop.
Generar Redirecciones mediante código
<?php
/**
* Crea una redirección utilizando Red_Item y permite modificar su comportamiento mediante hooks.
*
* @param string $source URL de origen.
* @param string $target URL de destino.
* @param bool $regex Define si se usa regex en la redirección.
* @param int $group_id ID del grupo de redirecciones.
* @param int $status_code Código HTTP (301 o 302).
* @return string Resultado de la operación.
*/
function ibp_create_redirection( $source, $target, $regex = false, $group_id = 1, $status_code = 301 ) {
// Permitir que otros modifiquen los valores de entrada mediante apply_filters
$source = apply_filters( 'ibp_filter_source_url', $source );
$target = apply_filters( 'ibp_filter_target_url', $target );
$regex = apply_filters( 'ibp_filter_is_regex', $regex );
$group_id = apply_filters( 'ibp_filter_group_id', $group_id );
$status_code = apply_filters( 'ibp_filter_status_code', $status_code );
// Acción antes de crear la redirección
do_action( 'ibp_before_create_redirection', $source, $target, $regex, $group_id, $status_code );
if ( class_exists( 'Red_Item' ) ) {
// Crear la redirección
$redirection_id = Red_Item::create( [
'source' => $source,
'target' => $target,
'regex' => $regex,
'group_id' => $group_id,
'red_action' => 'url',
'match' => 'url',
'action_code' => $status_code
]);
// Acción después de crear la redirección
do_action( 'ibp_after_create_redirection', $redirection_id, $source, $target, $regex, $group_id, $status_code );
return apply_filters( 'ibp_create_redirection_result', "Redirección creada con éxito. ID: $redirection_id", $redirection_id );
} else {
// Acción en caso de error
do_action( 'ibp_redirection_error', $source, $target );
return apply_filters( 'ibp_create_redirection_error', 'Error: No se pudo encontrar la clase Red_Item.' );
}
}
// Hook general que puede ser usado desde otros lugares
add_action( 'ibp_add_redirection', 'ibp_create_redirection', 10, 5 );
/**
* Registra un comando WP-CLI para gestionar redirecciones.
*
* Uso: wp ibp create_redirection --source='/origen' --target='/destino' --status_code=301
*/
if ( defined( 'WP_CLI' ) && WP_CLI ) {
/**
* Comando WP-CLI para crear una redirección.
*/
class IBP_Redirection_CLI {
/**
* Crea una redirección desde la línea de comandos.
*
* @param array $args Argumentos posicionales.
* @param array $assoc_args Argumentos asociados.
*/
public function create_redirection( $args, $assoc_args ) {
$source = $assoc_args['source'] ?? '';
$target = $assoc_args['target'] ?? '';
$status_code = $assoc_args['status_code'] ?? 301;
$regex = $assoc_args['regex'] ?? false;
$group_id = $assoc_args['group_id'] ?? 1;
if ( ! empty( $source ) && ! empty( $target ) ) {
// Llama a la acción para crear la redirección
$result = ibp_create_redirection( $source, $target, $regex, $group_id, $status_code );
WP_CLI::success( $result );
} else {
WP_CLI::error( 'Por favor, proporciona las URLs de origen y destino.' );
}
}
}
// Registra el comando en WP-CLI
WP_CLI::add_command( 'ibp create_redirection', [ 'IBP_Redirection_CLI', 'create_redirection' ] );
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment