Respuestas de foro creadas

Viendo 15 respuestas - de la 61 a la 75 (de un total de 474)
  • ¿Cuáles son esas necesidades que van más allá del Rewrite API? Imprescindible conocerlas para opinar.

    Aunque de los tres que has puesto, si la preocupación es el mantenimiento, yo me iría con roots.io

    WordPress no tiene ese tipo de aviso, te lo ha debido meter alguno de los plugins que tengas instalados.

    Aunque bueno, también te puedo dar ejemplos de WordPress con un par de visitas diarias de sus propietarios y que petan. Depende de muchos factores, sobre todo de quien desarrolle y administre el sitio.

    Para mí es muy sencillo:

    – Si el contenido de la URL antigua pasa a una URL nueva, es decir, es un cambio de ubicación, haz una redirección 301 desde la URL antigua a la nueva. Las reglas que puso @gwannon te pueden valer (en la mayoría de los casos, si no te valen vuelve y probamos otras).

    – Si la URL nueva representa la ubicación de un contenido completamente distinto y la URL/contenido antiguo simplemente no existe más, el error 404 es la respuesta válida. Y que Google te diga lo que quiera. No quieres una URL/contenido que no existe dando una respuesta que no sea 404.

    Si buscas Open Source, creo sinceramente que WordPress es la mejor opción que tienes. Sin duda. Te puedo dar varios ejemplos con decenas/cientos de millones de visitas mensuales. Yo personalmente recibo (poco más) de un millón de visitas mensuales en un VPS muy normalito y baratito. Y mira mis resultados de velocidad (que no es lo mismo que optimización) en PageSpeed Insights → http://bit.ly/2xknUQO

    No me siento cómodo dando los nombres de los sitios en público, pero te los doy por privado para que los investigues si quieres.

    A quién te diga esas cosas que te lo demuestre, que te de datos. El tiempo de las palabras ya pasó. 🙂

    Si no existe el tema activo, WordPress toma automáticamente uno predeterminado, a no ser que los temas predeterminados hayan sido borrados, por eso nunca se deben borrar aunque veas por ahí algunos sitios que lo recomiendan. Haz como te dice @almendron, descarga WordPress y restaura los temas predeterminados. Yo incluso iría más allá y restauraría todos los archivos del core de WordPress.

    Y el último mensaje sobre wp-config.php ….. raro raro. La primera vez que veo algo parecido.

    Me cuesta mucho creer que esto te haya sucedido de la noche a la mañana sin haber tocado nada. Es probable que se haya hecho algo, en WordPress o en el servidor, de lo que no eres consciente. ¿Has contactado con tu proveedor de hosting?

    Si quitas la carpeta del theme que tenías activo o le cambias el nombre a la carpeta, WordPress tomará uno de los que trae predeterminados de forma automática. Prueba a ver.

    Entiendo que no tengas copias creadas, ¿pero tu hosting no crea copias automáticas? Casi todas las empresas de hosting lo ofrecen, pregúntales a ver.

    Restaura una copia de seguridad a ver. Pero esas cosas no pasan solas de la noche a la mañana, tendrás que investigar que pasó.

    Como dice @LGRrusin, esos slugs ya los utiliza WordPress; se puede decir que son slugs reservados. Por eso te añade el «-2», para que no colisionen con los del core.

    Ok, pues dinos a ver. Si sigues con problemas y no encuentras la solución, ejecuta ese cron de sistema con el plugin wp-cron control (no confundir con wp-crontrol). A mi me ha dado muy buenos resultados (aunque ahora dejé de utilizarlo por incompatibilidad con LiteSpeed).

    Es prácticamente la misma idea que te propuse. De hecho, lo que hace add_rewrite_endpoint() es registrar un rewrite y sus query vars. No veo mucha diferencia práctica; salvo que no estoy de acuerdo en utilizar template_redirect para mostrar contenido como hacen en ese enlace, yo utilizará el filtro template_include para establecer el template deseado donde, ahora sí, se mostraría el contenido.

    De todas formas, me alegro que hayas encontrado la solución.

    PD: No se «redirige la URL a un plugin», lo que hace el código no es una redirección, es una reescritura.

    • Esta respuesta fue modificada hace 6 años, 4 meses por cybmeta.
    • Esta respuesta fue modificada hace 6 años, 4 meses por cybmeta.

    ¿Estás ejecutando wp-cron.php de forma prederminada o a través de un cron de sistema? Si en el segundo caso, ¿con wget o con php-cli?

    Mmmm ….. ¿y si activas WP_DEBUG en wp-config.php? Debería registrarte todos los errores, de cualquier tipo (fatal, notice y warning) y guardarlos en wp-content/debug.log

    define( 'WP_DEBUG', true );
    define( 'WP_DEBUG_LOG', true );
    define( 'WP_DEBUG_DISPLAY', false );

    Unas reglas que suelo seguir (no tienen por qué ser ciertas e inmutables, pero de momento las sigo a rajatabla):

    – Nunca, bajo ningún concepto, modifiques archivos de WordPress
    – Casi nunca, casi bajo ningún concepto, pongas en los themes código/funciones que no sean para el «look & feel». Si no es diseño/maquetación, utiliza un plugin.

    Ese código lo puedes convertir en un plugin con unas pocas líneas, y será independiente de la actualización de WordPress e independiente de la actualización del theme. Es más, seguirás teniendo esa funcionalidad aunque cambies de theme.

    <?php
    /*
    Plugin Name:  Send push notifications
    Plugin URI:   https://es.wordpress.org/support/topic/plugin-que-lanze-una-accion-hook-despues-de-publicar-un-post-la-primera-vez/
    Description:  A plugin to send notifications through Firebase
    Version:      0.1
    Author:       Juan Padial (@CybMeta)
    */
    
    add_action( 'transition_post_status', 'cyb_push_notification', 10, 3 );
    function cyb_push_notification( $new_status, $old_status, $post ) {
    
        // Si la notificación para este post ya se envió ...
        if( '1' == get_post_meta( $post->ID, 'notification_sent' , true ) ) return; 
    
        $request_args = [
            // ....
        ]
    
        $response = wp_remote_post(
            'https://fcm.googleapis.com/fcm/send',
            $request_args
        );
     
        if( is_wp_error( $response ) ) {
            error_log( $response->get_error_message() );
        } else {
            update_post_meta( $post->ID, 'notification_sent', '1' );
        }
    
    }

    A parte de los custom fields, igual se podría investigar hacerlo con el Options API y un cron job (1, 2), pero bueno, la idea base viene a ser la misma.

    Espero que te sirva. Saludos!!

    No se si termino de pillar el problema, pero el action transition_post_status que has mencionado lo veo idóneo para este use case, ¿no? ¿por qué no te vale?

    add_action( 'transition_post_status', 'cyb_push_notification', 10, 3 );
    function cyb_push_notification( $new_status, $old_status, $post ) {
    
        // Prueba la combinación de $new_status y $old_status
        // que te interese
        if( 'publish' === $old_status ) return;
        if( 'publish' !== $new_status ) return;
    
        $request_args['headers'] =  [
            'Authorization' => 'key=<SERVER KEY>',
            'Content-Type'  => 'application/json'
        ];
    
        $request_args['body'] =  [
            //....
        ];
    
        // wp_remote_post() utiliza cURL si está disponible
        // Ver https://developer.wordpress.org/reference/functions/wp_remote_post/
        // Ver https://developer.wordpress.org/reference/functions/wp_remote_request/
        $response = wp_remote_post(
            'https://fcm.googleapis.com/fcm/send',
            $request_args
        );
     
        if( is_wp_error( $response ) ) {
            error_log( $response->get_error_message() );
        }
    
    }

    Ahora me centro en el detalle de «la primera vez que se publique». Entiendo que si un post fue publicado, luego despublicado y luego publicado otra vez, entonces no quieres hacer el push de nuevo. Se me ocurre, por ejemplo, utilizar un custom field:

    add_action( 'transition_post_status', 'cyb_push_notification', 10, 3 );
    function cyb_push_notification( $new_status, $old_status, $post ) {
    
        // Si la notificación para este post ya se envió ...
        if( '1' == get_post_meta( $post->ID, 'notification_sent' , true ) ) return; 
    
        $request_args = [
            // ....
        ]
    
        $response = wp_remote_post(
            'https://fcm.googleapis.com/fcm/send',
            $request_args
        );
     
        if( is_wp_error( $response ) ) {
            error_log( $response->get_error_message() );
        } else {
            update_post_meta( $post->ID, 'notification_sent', '1' );
        }
    
    }

    Algo así creo que podría servirte.

Viendo 15 respuestas - de la 61 a la 75 (de un total de 474)