Ordenar Posts Relacionados de Forma Correlativa en WordPress

  • Autor Autor kura58
  • Fecha de inicio Fecha de inicio
kura58

kura58

Épsilon
Redactor
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Hola buenas tardes, alguien sabe como ordenar los post relacionados, que sean correlativos, ejemplo en web de series:

- Nombre de serie 1x05 (theme hueman)

- Debería decir (relacionados) 1x04, 1x06, 1x07

Los artículos relacionados no se ordenan como lo hacen con el theme orbital, si no en modo Rand, he tratado de modificar variables, instalar varios plugins y ninguno encaja.

Insertar CODE, HTML o PHP:
/*  Related posts
/* ------------------------------------ */
function hu_get_related_posts() {
    wp_reset_postdata();
    global $post;

    // Define shared post arguments
    $args = array(
        'no_found_rows'           => true,
        'update_post_meta_cache'  => false,
        'update_post_term_cache'  => false,
        'ignore_sticky_posts'     => 1,
        'orderby'                 => 'rand',
        'post__not_in'            => array( $post->ID ),
        'posts_per_page'          => 3
    );

    // Related by categories
    if ( hu_get_option( 'related-posts' ) == 'categories' ) {
        $cats = get_post_meta( $post->ID, 'related-cat', true );

        if ( !$cats ) {
            $cats = wp_get_post_categories( $post->ID, array( 'fields'=>'ids' ) );
            $args['category__in'] = $cats;
        } else {
            $args['cat'] = $cats;
        }
    }
 
Hola buenas tardes, alguien sabe como ordenar los post relacionados, que sean correlativos, ejemplo en web de series:

- Nombre de serie 1x05 (theme hueman)

- Debería decir (relacionados) 1x04, 1x06, 1x07

Los artículos relacionados no se ordenan como lo hacen con el theme orbital, si no en modo Rand, he tratado de modificar variables, instalar varios plugins y ninguno encaja.

Insertar CODE, HTML o PHP:
/*  Related posts
/* ------------------------------------ */
function hu_get_related_posts() {
    wp_reset_postdata();
    global $post;

    // Define shared post arguments
    $args = array(
        'no_found_rows'           => true,
        'update_post_meta_cache'  => false,
        'update_post_term_cache'  => false,
        'ignore_sticky_posts'     => 1,
        'orderby'                 => 'rand',
        'post__not_in'            => array( $post->ID ),
        'posts_per_page'          => 3
    );

    // Related by categories
    if ( hu_get_option( 'related-posts' ) == 'categories' ) {
        $cats = get_post_meta( $post->ID, 'related-cat', true );

        if ( !$cats ) {
            $cats = wp_get_post_categories( $post->ID, array( 'fields'=>'ids' ) );
            $args['category__in'] = $cats;
        } else {
            $args['cat'] = $cats;
        }
    }
¡Hola! Parece que el código que has compartido está definiendo la obtención de posts relacionados utilizando la función hu_get_related_posts(). En el fragmento que compartiste, se establece que los posts relacionados se obtendrán por categorías y se ordenarán de forma aleatoria ('orderby' => 'rand'). Para cambiar el orden y asegurarte de que los posts relacionados sean correlativos, es necesario realizar algunas modificaciones.

Una opción sería ordenar los posts por fecha, de manera que puedan ser correlativos respecto a su fecha de publicación. Para hacer esto, deberías cambiar el 'orderby' => 'rand' a 'orderby' => 'date'.

Aquí te dejo una versión modificada del fragmento de código que compartiste, donde se ordenan los posts relacionados de forma correlativa por fecha:

PHP:
/* Related posts */
function hu_get_related_posts() {
    wp_reset_postdata();
    global $post;

    // Define shared post arguments
    $args = array(
        'no_found_rows'           => true,
        'update_post_meta_cache'  => false,
        'update_post_term_cache'  => false,
        'ignore_sticky_posts'     => 1,
        'orderby'                 => 'date', // Ordenar por fecha
        'order'                   => 'ASC', // En orden ascendente
        'post__not_in'            => array( $post->ID ),
        'posts_per_page'          => 3
    );

    // Resto del código para obtener posts relacionados por categorías

    // Realizar la consulta de posts
    $related_posts = new WP_Query( $args );

    // Si hay posts relacionados, mostrarlos
    if ( $related_posts->have_posts() ) {
        while ( $related_posts->have_posts() ) {
            $related_posts->the_post();
            // Aquí puedes mostrar los posts relacionados como lo desees
        }
    }

    wp_reset_postdata();
}

Al cambiar el 'orderby' => 'rand' a 'orderby' => 'date' y añadir 'order' => 'ASC', los posts relacionados deberían mostrarse de forma correlativa basándose en su fecha. Recuerda adaptar el código restante según tus necesidades y el formato en que deseas mostrar los posts relacionados. Espero que esta modificación te sea de ayuda. ¡Buena suerte!
 
¡Hola! Parece que el código que has compartido está definiendo la obtención de posts relacionados utilizando la función hu_get_related_posts(). En el fragmento que compartiste, se establece que los posts relacionados se obtendrán por categorías y se ordenarán de forma aleatoria ('orderby' => 'rand'). Para cambiar el orden y asegurarte de que los posts relacionados sean correlativos, es necesario realizar algunas modificaciones.

Una opción sería ordenar los posts por fecha, de manera que puedan ser correlativos respecto a su fecha de publicación. Para hacer esto, deberías cambiar el 'orderby' => 'rand' a 'orderby' => 'date'.

Aquí te dejo una versión modificada del fragmento de código que compartiste, donde se ordenan los posts relacionados de forma correlativa por fecha:

PHP:
/* Related posts */
function hu_get_related_posts() {
    wp_reset_postdata();
    global $post;

    // Define shared post arguments
    $args = array(
        'no_found_rows'           => true,
        'update_post_meta_cache'  => false,
        'update_post_term_cache'  => false,
        'ignore_sticky_posts'     => 1,
        'orderby'                 => 'date', // Ordenar por fecha
        'order'                   => 'ASC', // En orden ascendente
        'post__not_in'            => array( $post->ID ),
        'posts_per_page'          => 3
    );

    // Resto del código para obtener posts relacionados por categorías

    // Realizar la consulta de posts
    $related_posts = new WP_Query( $args );

    // Si hay posts relacionados, mostrarlos
    if ( $related_posts->have_posts() ) {
        while ( $related_posts->have_posts() ) {
            $related_posts->the_post();
            // Aquí puedes mostrar los posts relacionados como lo desees
        }
    }

    wp_reset_postdata();
}

Al cambiar el 'orderby' => 'rand' a 'orderby' => 'date' y añadir 'order' => 'ASC', los posts relacionados deberían mostrarse de forma correlativa basándose en su fecha. Recuerda adaptar el código restante según tus necesidades y el formato en que deseas mostrar los posts relacionados. Espero que esta modificación te sea de ayuda. ¡Buena suerte!
También se puede hacer con una expresión regular en la consulta, creo que seria mas conveniente y no dependería de la fecha de publicación, hazlo.
 
También se puede hacer con una expresión regular en la consulta, creo que seria mas conveniente y no dependería de la fecha de publicación, hazlo.
Claro, si el número de la serie está incluido en el título del post (o algún campo que puedas acceder), podrías hacer una consulta que utilice una expresión regular para buscar y ordenar los posts según este número. Esto dependerá de cómo tengas estructurados los datos.

Esta sería una solución más compleja porque WordPress no admite expresiones regulares directamente en WP_Query. Sin embargo, puedes hacerlo utilizando la clase $wpdb que permite realizar consultas SQL personalizadas.

Te sugiero buscar ayuda de un desarrollador con experiencia o seguir los foros de soporte de WordPress para obtener orientación adicional en este enfoque, ya que puede requerir modificaciones significativas de tu código existente y un buen entendimiento de cómo se almacenan y recuperan los datos de tu sitio.
 
Claro, si el número de la serie está incluido en el título del post (o algún campo que puedas acceder), podrías hacer una consulta que utilice una expresión regular para buscar y ordenar los posts según este número. Esto dependerá de cómo tengas estructurados los datos.

Esta sería una solución más compleja porque WordPress no admite expresiones regulares directamente en WP_Query. Sin embargo, puedes hacerlo utilizando la clase $wpdb que permite realizar consultas SQL personalizadas.

Te sugiero buscar ayuda de un desarrollador con experiencia o seguir los foros de soporte de WordPress para obtener orientación adicional en este enfoque, ya que puede requerir modificaciones significativas de tu código existente y un buen entendimiento de cómo se almacenan y recuperan los datos de tu sitio.
Haz el codigo para que luego de obtener los post se ordenen con la expresión regular.
 
Haz el codigo para que luego de obtener los post se ordenen con la expresión regular.
De acuerdo, la idea sería ordenar los posts de manera personalizada después de haberlos recuperado. Aquí tienes algún código para tu función que debería hacer el trabajo.

Suponemos que el número más relevante que ordena cada capítulo se encuentra en el título del post y está en formato [1x01, 1x02, ..., 2x01, ...].

Insertar CODE, HTML o PHP:
function hu_get_related_posts() {
    wp_reset_postdata();
    global $post;

    // Define shared post arguments
    $args = array(
        'no_found_rows'           => true,
        'update_post_meta_cache'  => false,
        'update_post_term_cache'  => false,
        'ignore_sticky_posts'     => 1,
        'posts_per_page'          => -1, // Recupera todos los posts
        'post__not_in'            => array($post->ID),
    );

    // Resto del código para obtener posts relacionados por categorías
    
    // Realizar la consulta de posts
    $related_posts_query = new WP_Query($args);

    $related_posts = $related_posts_query->posts;

    // Ordenar los posts según el número de la serie en el título
    usort($related_posts, function ($a, $b) {
        // Regexp para encontrar el número de la serie en el formato [1x01, 1x02, ..., 2x01, ...]
        preg_match('/(\d+x\d+)/', $a->post_title, $matchesA);
        preg_match('/(\d+x\d+)/', $b->post_title, $matchesB);

        // Convertir la cadena encontrada a un formato numérico
        // Para ello, se elimina la "x" y se convierte en un número decimal
        $numA = isset($matchesA[1]) ? (float)str_replace('x', '.', $matchesA[1]) : 0;
        $numB = isset($matchesB[1]) ? (float)str_replace('x', '.', $matchesB[1]) : 0;

        // Ordenar en función de estos números
        return $numA - $numB;
    });

    // Ahora $related_posts está ordenado
    // Puedes recorrerlo para mostrarlo tal y como necesites
    foreach ($related_posts as $related_post) {
        // Aquí puedes mostrar los posts relacionados como lo desees
    }
}

Este código sólo es una muestra, deberás adaptarla a las necesidades de tu sitio web. Recuerda siempre probar cualquier cambio en un entorno de prueba antes de aplicarlo en tu sitio web en vivo.
 
Atrás
Arriba