WordPress.org

Ready to get started?Download WordPress

Forums

Multisite WP, Custom List Posts, "pre_get_posts", "switch_to_blog". (4 posts)

  1. gerardgmk
    Member
    Posted 12 months ago #

    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

  2. keesiemeijer
    moderator
    Posted 12 months ago #

    These are the English forums. Please try it here:
    http://es.forums.wordpress.org/

    Or translate your post to English.

  3. gerardgmk
    Member
    Posted 12 months ago #

    Good morning,

    First of all thanks for providing a forum for consultation devoloper. WordPress certainly do a great job each and every community.

    Apologize if this post is not well placed, I hope to continue providing and clippings, I light the way to full development.

    I commented, the problem I have is complicated even to understand, but I am more than blocked for days. (And if I do not get out of this hole with some solution, in my company seek to another :S)

    General Information:

    • I have made a "Custom Type" from 0, ie, I have a custom menu "Portfolio" with a "Form" made ​​for me, this form stored properly in the "DB" even on a table by my </ li>
    • This WP to have 3 blogs, elaborated in "Multisite". Each of them have the form and store devidamente on their boards and in mine
    • list "Posts" created in the "Portfolio", it works but only displays the post created in each "Blog of multisite" </ li>

    problem:
    - The idea that the customer wants is that you will have access to Superadmin to manipulate each of the "Blogs" hanging from general this is done smoothly. The problem comes in the "Blog 1" if you create a portfolio and select posts of (the form) you want to be visible in the "Blog 2 and 3", that when you save it stored in my table for the record.

    In the list of post of "blog 1", will leave the set in the "Blog 1", but if I go as a list of "Blog 2" posts should be created on the same blog and the other blogs that have selected in the form that they look (but these posts would not be editable in the "blog 2", but on the blog of origin), ie would be listed only the same blog posts over the other.

    Code so far: (list of blogs is possible as I have in an 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;
    }

    Possible suggestion:

    using,
    switch_to_blog () -> changed our blog.
    pre_get_posts -> We edit the list function
    loop_start -> Browse all blogs
    restore_current_blog () -> reset to current blog
    add_filter (posts_results -> To view the entire list created.

    With all this I guess I should get it, but I'm lost.

    Someone could help me with some light along the way, before I get fired.

    Greetings and many thanks in advance. Sorry for the level of English.

  4. You're trying to share data across a Multisite network, and that just is not what it's meant to do. So this CAN be done, but it's going to be particularly easy nor pretty.

    Just to check, are you trying to add this to show on the edit screen, and if so, are you sure this has to be a multisite?

Reply

You must log in to post.

About this Topic