wp_get_post_tags the_tags tag name get_the_tags first codex all php wordpress custom-post-type

php - the_tags - wordpress get first tag



Publicaciones de pedidos de Wordpress por tipo de publicaciĆ³n (3)

Finalmente obtuve la solución y puede hacerse usando un filtro.

La solución se ve así.

add_filter( ''posts_request'' , ''modify_request'' ); function modify_request( $query) { global $wpdb; if(strstr($query,"post_type IN (''review'', ''directory'')")){ $where = str_replace("ORDER BY {$wpdb->posts}.post_date","ORDER BY {$wpdb->posts}.post_type",$query); } return $where; }

Intento crear un sistema que obtenga publicaciones de 2 tipos de publicaciones y quiero mostrar las publicaciones ordenadas por su tipo de publicación. Intento mostrar primero las publicaciones de un tipo de publicación y luego otro tipo de publicación, pero la consulta que utilicé lo mezcla todo. ¿Alguien puede sugerir una buena solución para esto? Aquí está mi código.

$paged = get_query_var( ''paged'' ) ? get_query_var( ''paged'' ) : 1; $args = array( ''post_type'' => array(''review'',''directory''), ''orderby'' => ''name'', ''order'' => ''ASC'', ''posts_per_page'' => ''4'', ''paged'' => $paged , ''tax_query'' => array( array( ''taxonomy'' => ''Reviews'', ''field'' => ''id'', ''terms'' => $cat_id ), ), ); query_posts($args); if (have_posts()) : while (have_posts()) : the_post(); $product_terms = wp_get_post_terms(get_the_ID(), ''Reviews'', array("fields" => "all", "order" => "DESC")); $postype=get_post_type( get_the_ID() ); if($postype==''review'') { ?> <div class="review-post"> <a href="http://<?php the_permalink(); ?>" target="_blank"><h3><?php the_title(); ?></h3></a> <div class="review-cat-new"> <?php echo get_the_term_list( $post->ID, ''Reviews'', ''Category: '', '', '', '''' ); ?> </div> <?php if(get_field(''see_it'')) $seeit_text= get_field(''see_it''); if(get_field(''skip_it'')) $skipit_text= get_field(''skip_it''); ?> <div class="see-skip"> <p class="see-it"><span>See it:</span> <?php echo $seeit_text; ?> </p> <p class="skip-it"><span>Skip it:</span> <?php echo $skipit_text; ?> </p> </div> <?php echo custom_field_excerpt(); ?> </div> <?php } else { ?> <div class="review-post"> <a href="h<?php the_permalink(); ?>" target="_blank"><h3><?php the_title(); ?></h3></a> <div class="review-cat-new"> <?php echo get_the_term_list( get_the_ID(), ''Reviews'', ''Category: '', '', '', '''' ); ?> </div> <?php echo the_field(''enter_content_direc''); ?> <?php if(get_field(''enter_textdirec'')) $text= get_field(''enter_textdirec''); if(get_field(''enter_linkdirec'')) $textlink= get_field(''enter_linkdirec''); ?> <div class="see-skip"> <p class="see-it direc"><span><a target="_blank" style="color:#5D6D71; text-transform: lowercase;" href="<?php echo $textlink;?>"><?php echo $textlink;?> </a></span> </p> </div> </div> <?php } endwhile; echo ''<div class="paging">''; wp_pagenavi(); echo ''</div>''; endif;

Entonces, ¿hay alguna manera de mostrar primero las publicaciones de los comentarios y luego el directorio?


La primera solución que me viene a la mente es conseguir publicaciones solo para la primera categoría. Restablezca la consulta ( wp_reset_query() ) y vuelva a obtenerla para la segunda categoría. Necesitas duplicar tu código, por supuesto, pero no veo ninguna otra solución, es WordPress, eres muy limitado.

La segunda solución es consultar la base de datos directamente así:

$result = mysql_query(''SELECT * FROM `wp_posts` WHERE post_type = "page" OR post_type = "post" ORDER BY post_type ASC , post_date DESC ''); $posts = array(); if($result) { while ($row = mysql_fetch_assoc($result)) { $posts[] = $row; } } mysql_free_result($result); echo(''<pre>''); var_dump($posts); echo(''</pre>''); die();

Tenga en cuenta que he usado post y tipos de page ya que estos son predeterminados y existen en mi instalación de WP. Pero puedes usar diferente. Puedes jugar con esta consulta tanto como quieras.


Ordene por tipos de publicación con orden de tipo de publicación personalizada:

add_filter(''pre_get_posts'', function ($query) { if ($query->is_search && !is_admin()) : $query->set(''post_type'', [ ''cpt-1'', ''cpt-2'', ''post'', ''cpt-3'']); endif; return $query; }); add_filter(''posts_orderby'', function ( $order ) { if ( ! is_admin() ) : if ( is_search() && is_main_query() ) : global $wpdb; $order = "FIELD( post_type, ''cpt-1'', ''cpt-2'', ''post'' ), {$wpdb->posts}.post_modified DESC"; endif; // Disable this filter for future queries! remove_filter( current_filter(), __FUNCTION__); endif; return $order; });