31/07/2013, 02:15
|
| | Fecha de Ingreso: julio-2013
Mensajes: 1
Antigüedad: 11 años, 3 meses Puntos: 0 | |
Multisite WP, Custom List Posts, "pre_get_posts", "switch_to_blog" Buenos dias,
Ante todo gracias por brindar a devoloper un foro de consulta. WordPress sin duda haceis un gran trabajo todos y toda la comunidad.
Disculparme si este post no esta bien colocado, espero poder seguir aportando y que me podais aportar luz en el camino de un pleno desarrollo.
Os comento, el problema que tengo es algo complicado incluso de hacer entender, pero estoy mas que bloqueado desde hace dias. (Y si no consigo salir de este agujero con alguna solución, en mi empresa buscaran a otro :S )
Información general:
He realizado un Custom Type desde 0, es decir, tengo un menu personalizado de Portfolio con un Form hecho a mi medida, este form al macena correctamente en la BBDD incluso en una tabla realizada por mi
Este WP con tiene 3 blogs, elaborados en Multisite. Cada uno de ellos tienen el form y almacenan devidamente en sus tablas y en la mia
El listado de Posts creados en este Portfolio, funciona pero solo visualiza los post creados en cada Blog del multisite
Problema:
- La idea que quiere el cliente es que el tendra accesso al Superadmin para manipular cada uno de los Blogs que cuelgan del general, esto sin problema esta realizado. El problema vienen que en el blog 1 si creas un posts del portfolio y seleccionas (el form) que quieres que sea visible en el blog 2 y 3, esto cuando se guarda lo almacena en mi tabla para que quede constancia.
En el listado de post del blog 1, saldra el creado en el Blog 1, pero si me voy en listado del Blog 2, deberia verse los posts creado en el mismo blog y los de los otros blogs que han seleccionado en el form que se vieran (pero estos posts no serian editables en el blog 2, sino en el blog de procedencia), es decir, solo se listarian los posts del mismo blog mas el de los otros.
Codigo hasta ahora: (listar los blogs es posible ya que los tengo en un array)
add_action( 'pre_get_posts' ,'include_this_portfolio' );
function include_this_portfolio( $query ) {
global $blog_id;
//Si no es admin lista normal
if( !is_admin() )
return $query;
global $pagenow;
//Si la pagina es edit, visualiza. Para filtrar que no se vea en otras paginas.
if( 'edit.php' == $pagenow && ( get_query_var('post_type') && 'portfolio' == get_query_var('post_type') ) ){
$query->set( 'post__in', array(37) ); // array page ids Incluye
}
return $query;
}
Posible sugerencia:
Usando,
switch_to_blog() ->Cambiamos de blog.
pre_get_posts -> Editamos la funcion del listado
loop_start -> Recorrer todos los blogs
restore_current_blog()-> restaurar al blog actual
add_filter(posts_results -> Para visualizar todo el listado creado.
Con todo esto debería conseguirlo me supongo, pero ya estoy perdido.
Alguien me podría ayudar con alguna luz en el camino, antes que me despidan.
Saludos y mil gracias de antemano.
atte.Gerard |