Morgabe
Dseda
Programador
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Y se puede hacer con chat gpt la versión gratuita? supongo que sí pero lo hará por fragmentos no?Soy desarrollador y tuve hasta ahora 3 casos de clientes mios que desarrollaron gran parte del plugin por IA, bastante basicos pero si alguno era extenso y me contrataron solo para hacer la parte mas "compleja", por ejemplo unos artículos que necesitaban algunas taxonomías extras, eso lo hizo la IA y yo el reporte para extraer los datos y hacer un calculo para despues ponerlo en un reporte.
<?php
/*
Plugin Name: Suscripción a comentarios
Description: Permite al usuario suscribirse a los comentarios
Version: 1.0
Author: Yo
*/
// Activation hook
register_activation_hook(__FILE__, 'comment_subscription_plugin_activate');
// Deactivation hook
register_deactivation_hook(__FILE__, 'comment_subscription_plugin_deactivate');
// Initialize the plugin
add_action('plugins_loaded', 'comment_subscription_plugin_init');
function comment_subscription_plugin_activate() {
global $wpdb;
$table_name = $wpdb->prefix . 'subscriptions';
$wpdb->query("
CREATE TABLE IF NOT EXISTS $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
comment_id mediumint(9) NOT NULL,
email varchar(255) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY comment_id (comment_id, email)
) $wpdb->charset $wpdb->collate;
");
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
function comment_subscription_plugin_deactivate() {
// Verifica si el plugin se desactiva manualmente o debido a la desinstalación
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) {
return;
}
global $wpdb;
$table_name = $wpdb->prefix . 'comment_subscriptions';
$wpdb->query("DROP TABLE IF EXISTS $table_name");
}
function comment_subscription_plugin_init() {
// Add checkbox to comment form
add_filter('comment_form_default_fields', 'comment_subscription_plugin_add_checkbox');
add_action('comment_post', 'comment_subscription_plugin_save_subscription');
// Process subscription
add_action('wp_loaded', 'comment_subscription_plugin_process_subscription');
}
function comment_subscription_plugin_save_subscription($comment_id) {
if (isset($_POST['subscribe_to_comments']) && $_POST['subscribe_to_comments'] == 1) {
$email = sanitize_email($_POST['email']);
$post_id = get_comment($comment_id)->comment_post_ID;
if (!empty($email) && is_email($email)) {
global $wpdb;
$table_name = $wpdb->prefix . 'comment_subscriptions';
// Comprobar si el usuario ya está suscrito con el mismo correo a este post
$existing_subscription = $wpdb->get_row(
$wpdb->prepare("SELECT * FROM $table_name WHERE email = %s AND post_id = %d", $email, $post_id)
);
if (!$existing_subscription) {
// Insertar una nueva suscripción si no existe una suscripción con el mismo correo para este post
$wpdb->insert(
$table_name,
array(
'post_id' => $post_id,
'email' => $email,
'registration_date' => current_time('mysql', 1), // Agrega la fecha de registro
),
array('%d', '%s', '%s')
);
}
}
}
}
function comment_subscription_plugin_process_subscription() {
if (isset($_GET['unsubscribe_comment']) && isset($_GET['email'])) {
$post_id = get_comment($_GET['unsubscribe_comment'])->comment_post_ID;
$email = sanitize_email($_GET['email']);
if (!empty($email) && is_email($email)) {
global $wpdb;
$table_name = $wpdb->prefix . 'comment_subscriptions';
$wpdb->delete(
$table_name,
array(
'post_id' => $post_id,
'email' => $email,
),
array('%d', '%s')
);
echo 'Has eliminado con éxito su suscripción a los comentarios de este post.';
exit;
}
}
}
// ...
function comment_subscription_plugin_notify_subscribers($comment_id, $comment_approved) {
if ($comment_approved == 1) {
$post_id = get_comment($comment_id)->comment_post_ID;
$comment_permalink = get_comment_link($comment_id);
$post_title = get_the_title($post_id);
global $wpdb;
$table_name = $wpdb->prefix . 'comment_subscriptions';
$subscribers = $wpdb->get_results($wpdb->prepare("SELECT * FROM $table_name WHERE post_id = %d", $post_id));
if (!empty($subscribers)) {
$subject = "Nuevo comentario en $post_title";
$message = "Se ha publicado un nuevo comentario en el artículo: $post_title:\n\n";
$message .= "Ver el comentario en el siguiente enlace: {$comment_permalink}\n\n";
foreach ($subscribers as $subscriber) {
$unsubscribe_link = add_query_arg(
array(
'unsubscribe_comment' => $comment_id,
'email' => urlencode($subscriber->email),
),
home_url()
);
$unsubscribe_message = "\n\nPara cancelar la suscripción a este artículo, haga clic en el siguiente enlace: {$unsubscribe_link}";
wp_mail($subscriber->email, $subject, $message . $unsubscribe_message);
}
}
}
}
add_action('comment_post', 'comment_subscription_plugin_notify_subscribers', 10, 2);
//Agrega casilla de suscripción automáticamente al formulario de comentarios
function comment_subscription_plugin_add_checkbox($fields) {
$fields['subscribe_to_comments'] = '<p class="comment-form-subscribe"><label for="subscribe_to_comments"><input type="checkbox" id="subscribe_to_comments" name="subscribe_to_comments" value="1" />Suscribirme para recibir respuestas a mi correo</label></p>';
return $fields;
}
//Agrega casilla de suscripción manualmente al formulario de comentarios
function comment_subscription_plugin_add_checkbox_to_comments($args) {
?>
<p class="comment-form-subscribe" style="display: block !important;">
<label for="subscribe_to_comments">
<div id="subscribe_to_comments_container">
<input type="checkbox" id="subscribe_to_comments" name="subscribe_to_comments" value="1" class="subscribe_checkbox" <?php checked(isset($_POST['subscribe_to_comments']) && $_POST['subscribe_to_comments'], 1); ?> />
Suscribirseo.
</div>
</label>
</p>
<?php
}
//Administración de suscriptores
add_action('admin_menu', 'comment_subscription_plugin_menu');
function comment_subscription_plugin_menu() {
add_menu_page(
'Subscription Users',
'Suscripciones',
'manage_options',
'comment-subscription-users',
'comment_subscription_plugin_users_page'
);
}
function comment_subscription_plugin_users_page() {
if (!current_user_can('manage_options')) {
wp_die('No tienes permisos suficientes para acceder a esta página.');
}
global $wpdb;
$table_name = $wpdb->prefix . 'comment_subscriptions';
// Procesar la eliminación individual
if (isset($_GET['action']) && $_GET['action'] === 'delete' && isset($_GET['email'])) {
$email = sanitize_email($_GET['email']);
if (!empty($email) && is_email($email)) {
$wpdb->delete($table_name, array('email' => $email));
echo '<div class="updated"><p>Todas las suscripciones de ' . esc_html($email) . ' han sido eliminadas con éxito.</p></div>';
}
}
// Obtener la cadena de búsqueda
$search_term = isset($_GET['s']) ? sanitize_text_field($_GET['s']) : '';
// Configuración de paginación
$per_page = 50;
$current_page = isset($_GET['paged']) ? max(1, intval($_GET['paged'])) : 1;
$offset = ($current_page - 1) * $per_page;
// Obtener la lista de usuarios según la cadena de búsqueda y la paginación
// Obtener la lista de usuarios según la cadena de búsqueda y la paginación
if (!empty($search_term)) {
$users = $wpdb->get_results(
$wpdb->prepare("SELECT DISTINCT email FROM $table_name WHERE email LIKE %s ORDER BY registration_date DESC LIMIT %d, %d", '%' . like_escape($search_term) . '%', $offset, $per_page)
);
$total_users = $wpdb->get_var($wpdb->prepare("SELECT COUNT(DISTINCT email) FROM $table_name WHERE email LIKE %s", '%' . like_escape($search_term) . '%'));
} else {
$users = $wpdb->get_results("SELECT DISTINCT email FROM $table_name ORDER BY registration_date DESC LIMIT $offset, $per_page");
$total_users = $wpdb->get_var("SELECT COUNT(DISTINCT email) FROM $table_name");
}
echo '<div class="wrap">';
// Obtener la cantidad de usuarios suscritos
$total_subscribers = $wpdb->get_var("SELECT COUNT(DISTINCT email) FROM $table_name");
// Mostrar el título con la cantidad de usuarios suscritos
echo '<h2>Usuarios suscritos <small>(' . esc_html($total_subscribers) . ')</small></h2>';
// Formulario de búsqueda
echo '<form method="get">';
echo '<input type="hidden" name="page" value="comment-subscription-users" />';
echo '<input type="text" name="s" placeholder="Buscar por correo electrónico" value="' . esc_attr($search_term) . '" />';
echo '<input type="submit" class="button" value="Buscar" />';
echo '</form>';
echo '<style>';
echo '.responsive-table { width: 100%; border-collapse: collapse; }';
echo '.responsive-table th, .responsive-table td { border: 1px solid #ddd; padding: 8px; text-align: left; }';
echo '</style>';
// Mostrar la tabla de usuarios paginada
if (!empty($users)) {
echo '<table class="responsive-table">';
echo '<tr><th>Email</th><th>Posts Suscritos</th><th>Acciones</th></tr>';
foreach ($users as $user) {
echo '<tr>';
echo '<td>' . esc_html($user->email) . '</td>';
echo '<td>';
// Mostrar los posts suscritos en una lista desordenada (ul)
echo '<ul>';
$post_ids = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM $table_name WHERE email = %s", $user->email));
foreach ($post_ids as $post_id) {
$post_title = get_the_title($post_id);
echo '<li>' . esc_html($post_title) . '</li>';
}
echo '</ul>';
echo '</td>';
echo '<td><a href="?page=comment-subscription-users&action=delete&email=' . urlencode($user->email) . '">Eliminar</a></td>';
echo '</tr>';
}
echo '</table>';
// Paginación
echo '<div class="tablenav">';
echo '<div class="tablenav-pages">';
echo paginate_links(array(
'base' => add_query_arg('paged', '%#%'),
'format' => '',
'prev_text' => __('« Anterior'),
'next_text' => __('Siguiente »'),
'total' => ceil($total_users / $per_page),
'current' => $current_page,
));
echo '</div>';
echo '</div>';
} else {
echo '<p>No se encontraron usuarios.</p>';
}
echo '</div>';
}
El plugin es para que los usuarios se suscriban al dejar comentarios en los post, de modo que reciban una notificación al correo electrónico cuando alguien más comente el post.¿Y qué hace el plugin @sabogal ?
¿Crees que pasaría la revisión para subirlo al repertorio de wordpress?
He visto que con los themes los revisan con bastante profundidad, pero con los plugins hasta alguno con virus se les ha escachado por ahí... Por eso me pregunto si ellos podrían detectar si está hecho con ia.
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?