WordPress: get_posts () y orderby

negli argomenti passati negli inputs. Usando get_posts() , puede seleccionar una secuencia de mensaje exacto mediante el parámetro post__in en los argumentos que se pasan en las entradas. . La orden, sin embargo, no es consistente con la secuencia mostrada como WordPress realiza comprobaciones sobre la cláusula ORDER BY de la selección, a pesar de la versión 2.8 está disponible el valor none . Como resultado, un código como el siguiente no devuelve el orden correcto:

1
2
3
4
5
6
7
8
9
/ * Sólo estos envíos en esta secuencia * /
array ( 45 , 89 , 210 , 3 ) ; $ Ids = matriz (45, 89, 210, 3);
array ( $ Args = array (
'publish' , 'Post_status' => 'publicar',
'none' , 'Orderby' => 'none',
1 , 'Numberposts' => - 1,
$ids 'Post__in' => $ ids
);
get_posts ( $args ) ; $ Resultados = get_posts ($ args);

Esto sucede porque WordPress utiliza un IN en este caso, a saber:

1
WHERE ID IN ( 45 , 89 , 210 , 3 ) SELECT ... WHERE id IN (45, 89, 210, 3)

En SQL para ordenar los elementos ", así como adecuadas 'usted tiene que utilizar un determinado ORDER BY :

1
WHERE ID IN ( 45 , 89 , 210 , 3 ) ORDER BY FIND_IN_SET ( ID , '45, 89, 210, 3' ) SELECT ... WHERE ID IN (45, 89, 210, 3) ORDER BY FIND_IN_SET (ID, '45, 89, 210, 3 ')

della get_posts() WordPress lo filtra immediatamente, sostituendolo con la data. Huelga decir que si se intenta pasar el FIND_IN SET en el parámetro orderby los get_posts() filtros de WordPress de inmediato, reemplazándolo con la fecha. : La única manera es activar el filtro de posts_orderby , nos obliga el uso de FIND_IN SET :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/ * Sólo estos envíos en esta secuencia * /
; global $ ids;
array ( 45 , 89 , 210 , 3 ) ; $ Ids = matriz (45, 89, 210, 3);
array ( $ Args = array (
'publish' , 'Post_status' => 'publicar',
'none' , 'Orderby' => 'none',
1 , 'Numberposts' => - 1,
false , 'Suppress_filters' => false,
$ids 'Post__in' => $ ids
);

/ * El uso de una función anidada como ejemplo * /
$orderby ) { función posts_orderby ($ orderby) {
, $wpdb ; global $ ids, $ WPDB;

join ( ',' , $ids ) ; $ Secuencia = unirse a (',', $ ids);
'FIND_IN_SET(' . $wpdb -> posts . '.ID, \'' . $sequence . '\')' ; $ Orderby = 'FIND_IN_SET (' $ WPDB -> mensajes .. 'ID, \'' $ Secuencia..' \ ').';
; return $ orderby;
}

/ * Añadir el filtro * /
, 'posts_orderby' ) ; add_filter ('posts_orderby', 'posts_orderby');

get_posts ( $args ) ; $ Resultados = get_posts ($ args);

/ * ¿Quitó * /
, 'posts_orderby' ) ; remove_filter ('posts_orderby', 'posts_orderby');

Eso es todo!

No hay comentarios para este post

Deja un comentario

TAG XHTML PERMISOS: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> ENTRADA CÓDIGO:
 <pre></pre> // blocco generico <code></code> // blocco generico [cc_actionscript][/cc_actionscript] // Actionscript [cc_actionscript3][/cc_actionscript3] // Actionscript 3 [cc_css][/cc_css] // CSS Style Sheet [cc_html][/cc_html] // HTML [cc_js][/cc_js] // Javascript [cc_objc][/cc_objc] // Objective-C [cc_php][/cc_objc] // PHP [cc_sql][/cc_sql] // SQL