Pregunta sobre Developing with WordPress de Wordpress:

Ordenar por archivo-custotype.php

Un usuario preguntó 👇

Hola a todos,

Creé un tipo personalizado con un campo de fecha (no creación de contenido). El tipo personalizado se ha creado para eventos programados, por lo que es fundamental que estén ordenados por fecha.

Tengo el siguiente código en archive.php. Por favor, guíame para desarrollar archive-custotype.php

		<?php
		if ( have_posts() ) : ?>

			<header class="page-header">
				<?php
					the_archive_title( '<h1 class="page-title">', '</h1>' );
					the_archive_description( '<div class="archive-description">', '</div>' );
				?>
			</header><!-- .page-header -->

			<?php
			/* Start the Loop */
			while ( have_posts() ) : the_post();

				/*
				 * Include the Post-Format-specific template for the content.
				 * If you want to override this in a child theme, then include a file
				 * called content-___.php (where ___ is the Post Format name) and that will be used instead.
				 */
				get_template_part( 'template-parts/content', get_post_format() );

			endwhile;

			the_posts_navigation();

		else :

			get_template_part( 'template-parts/content', 'none' );

		endif; ?>

Gracias por adelantado

(@sterndata)

Moderador del foro y voluntario del equipo de apoyo

Hace 2 años, 2 meses

debe usar pre_get_posts () para cambiar el orden de clasificación cuando se realiza la consulta para obtener publicaciones para esa página.

https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

Luego, solo necesita hacer todo lo necesario en esa plantilla para formatear las cosas de la manera que desee.

(@ astilla222)

Hace 2 años, 2 meses

Hola @sterndata! Muchas gracias por tus comentarios.

Lo siento, pero necesitaré más consejos para desarrollar esto. Si lo acepté bien, tengo que agregar esto a mi código:

<?php add_action( 'pre_get_posts', 'your_function_name' ); ?>

Luego tengo que definir ‘your_function_name’ en el archivo de funciones. ¿Correcto?

Algo como

function sort_by_date(){
	
}

Perdón por el problema original, pero durante mucho tiempo sin desarrollo …

¿Podría darme algunas pautas para desarrollar la función?

Gracias por adelantado.

Esta respuesta fue modificada hace 2 años, 2 meses por.

(@sterndata)

Moderador del foro y voluntario del equipo de apoyo

Hace 2 años, 2 meses

Deberá reordenar la consulta de acuerdo con su campo personalizado, por lo que deberá utilizar una consulta de meta-clave como parte de la consulta que está modificando. Este no es un simple libro de cocina.

Consulte la documentación de get_posts () y wp_query () para ver ejemplos de lo que debe hacer para agregar la consulta de página a través de pre_get_posts ().

(@ astilla222)

Hace 2 años, 2 meses

@sterndata encontré esto (para agregar a functions.php)

function prefix_modify_query_order( $query ) {
  if ( is_main_query() ) {
 
    $args =  array( 'post_date' => 'ASC' );
 
    $query->set( 'orderby', $args );
  }
}
add_action( 'pre_get_posts', 'prefix_modify_query_order' );

¿Crees que podría cambiar ‘post_date’ a mi archivo de fecha personalizado? Verificaré la documentación que me recomiendas.

(@sterndata)

Moderador del foro y voluntario del equipo de apoyo

Hace 2 años, 2 meses

No, porque los campos personalizados requieren una metaconsulta (consulta de metadatos).

(@ astilla222)

Hace 2 años, 2 meses

¿Es este un ejemplo más preciso?


<?php

function my_pre_get_posts( $query ) {
	
	// do not modify queries in the admin
	if( is_admin() ) {
		
		return $query;
		
	}
	

	// only modify queries for 'event' post type
	if( isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'event' ) {
		
		$query->set('orderby', 'meta_value');	
		$query->set('meta_key', 'start_date');	 
		$query->set('order', 'DESC'); 
		
	}
	

	// return
	return $query;

}

add_action('pre_get_posts', 'my_pre_get_posts');

?>

(@sterndata)

Moderador del foro y voluntario del equipo de apoyo

Hace 2 años, 2 meses

¡Creo que estás llegando!

(@ astilla222)

Hace 2 años, 2 meses

Supongo que las variables a actualizar son:


$query->set('orderby', 'meta_value');	
$query->set('meta_key', 'start_date');	 
$query->set('order', 'DESC'); 

si el tipo de trabajo programable personalizado debe ser de línea de comando por fecha campo personalizado:


$query->set('orderby', '*****');	
$query->set('meta_key', 'fecha');	 
$query->set('order', 'DESC');

¿Cuál es el valor de su meta_valor? ¿Están bien las otras variables?

(@bcworkz)

Hace 2 años, 2 meses

Siempre debe establecer ‘orderby’ en ‘meta_value’ o ‘meta_value_num’ sin importar qué meta_key esté solicitando. Realmente no necesitas un argumento meta_value si también estás usando «meta_query». Si proporcionó un argumento meta_valor, la consulta devolverá solo publicaciones cuyo valor sea igual al argumento, en cuyo caso ese campo tiene pocos puntos en orden, ya que todos tienen el mismo valor.

Definitivamente necesitas establecer el valor de «meta_query». En este caso, el argumento «meta_key» es solo para decirle a WP qué clave usar para un comando en meta_value. Los criterios de consulta reales se especifican en «meta_query». Para obtener detalles sobre el uso de meta_query, consulte https://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

(@ astilla222)

Hace 2 años, 2 meses

Es realmente extraño, porque el siguiente código funciona

function my_pre_get_posts( $query ) {
         
        $query->set('orderby', 'meta_value');   
        $query->set('order', 'ASC'); 
        
    // return
    return $query;

}

Pero solo lo siguiente, no:

function my_pre_get_posts( $query ) {
         
        $query->set('orderby', 'meta_value');   
        $query->set('meta_key', 'fecha');   
        $query->set('order', 'ASC'); 
        
    // return
    return $query;

}

¿Por qué si presento $query->set('meta_key', 'fecha'); da vueltas y una pregunta vacía?

(@bcworkz)

Hace 2 años, 2 meses

Si ordena meta_value pero no proporciona un argumento meta_key, el argumento se ignora y se usa el comando predeterminado (post_date). Encontrará todas las publicaciones, independientemente del meta_valor, limitadas solo por el valor de publicaciones_por_página.

Si ordena meta_value y proporciona un argumento meta_key, pero no proporciona un argumento meta_value o meta_query, debe asignar todas las publicaciones con valor ‘fecha’ de cualquier tipo. No sé por qué falla su pregunta. Puede entrar en conflicto con otras consultas ya resueltas. Tal vez nos diga por qué examinar el SQL real que genera WP. Para ver el SQL, coloque esta línea en su plantilla en algún lugar fuera del ciclo:
<pre><?php echo get_queried_object()->request; ?></pre>

Si bien la respuesta puede ser informativa, la verdad del asunto es que debe proporcionar un argumento meta_valor o meta_query. Dije anteriormente que deberías usar meta_query, pero me olvidé de la posibilidad de argumentos meta_compare. Deberías poder hacer algo como

$query->set('orderby', 'meta_value');   
$query->set('meta_key', 'fecha'); 
$query->set('meta_value', '2018-01-15'); 
$query->set('meta_compare', '>'); 
$query->set('order', 'ASC');

(@ astilla222)

Hace 2 años, 1 mes

¡Hola @bcworkz! Vuelvo a esta pregunta.

Aquí están mis functions.php actuales:


<?php
function my_theme_enqueue_styles() {

    $parent_style = 'foundation-css-framework'; // This is 'foundation-css-framework' child theme.

    wp_enqueue_style( $parent_style, get_template_directory_uri() . '/style.css' );
    wp_enqueue_style( 'clubcotacero',
        get_stylesheet_directory_uri() . '/style.css',
        array( $parent_style ),
        wp_get_theme()->get('Version')
    );
}

function my_pre_get_posts( $query ) {
         
        $query->set('orderby', 'meta_value');   
        $query->set('meta_key', 'fecha');   
        $query->set('order', 'ASC'); 
        
    // return
    return $query;

}

/*add_action('pre_get_posts', 'my_pre_get_posts');*/

add_action( 'wp_enqueue_scripts', 'my_theme_enqueue_styles' );
?>

Y aquí está mi archivo archive.php:


<?php
/**
 * The template for displaying archive pages
 *
 * @link https://developer.wordpress.org/themes/basics/template-hierarchy/
 *
 * @package Foundation_CSS_framework
 */

get_header(); ?>

	<div id="primary" class="content-area large-12 medium-8 small-12 cell grid-x">
		<main id="main" class="site-main">

		<?php
		if ( have_posts() ) : ?>

			<header class="page-header large-12 cell">
				<h1 class="page-title"> Activdades Programadas </h1>
				<?php
					the_archive_description( '<div class="archive-description">', '</div>' );
				?>
			</header><!-- .page-header -->

			<?php
			/* Start the Loop */

			/* Mirando el resultado de la busqueda */
			
			/**/

			while ( have_posts() ) : the_post();

				/*
				 * Llamamos a nuestro propio content solo para listas
				 */

				get_template_part( 'template-parts/content-programada-lista', get_post_format() );

			endwhile;

			the_posts_navigation();

		else :

			get_template_part( 'template-parts/content', 'none' );

		endif; ?>

		</main><!-- #main -->
	</div><!-- #primary -->

<?php
get_sidebar();
get_footer();

Traté de pegar tu línea en el código: solicitud;

Pero, por supuesto, no es una solución de «copiar y pegar». Tengo esto: Notice: Unspecified property: WP_Post_Type :: $ request in C: xampp htdocs testeo wp-content theme clubcotacero archive-programada.php online 42

Así que supongo que tengo que cambiar «-> solicitud». ¿Podrías arrojar algo de luz sobre esto? Nos encantó.

Para Vector TypeR

Esta respuesta fue modificada hace 2 años, hace un mes por.

(@bcworkz)

Hace 2 años, 1 mes

Lo siento, la razón por la que se me ocurrió ese código ni siquiera tiene sentido. ¿Qué debo darte?

<?php global $wp_query;
echo $wp_query->request; ?>

(@ astilla222)

Hace 2 años, 1 mes

¡Gracias! Aquí está el resultado: SELECT SQL_CALC_FOUND_ROWS lm_posts.ID De lm_posts PLACE 1 = 1 AND lm_posts.post_type = ‘programada’ AND (lm_posts.post_status = ‘publish’) ORDER BY lm_posts.post_date 10

No parece estar ordenando por campo de fecha personalizado, sino que está usando post_date. No tengo idea de dónde está la pregunta … ¿algún consejo?

(@ astilla222)

Hace 1 año, 10 meses

Problema CLAVE: «WPCF-» debe agregarse antes del caracol de campo personalizado.

¿Solucionó tu problema??

0 / 0

Deja una respuesta 0

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *