Soporte » Plugins y Hacks » Plugin para crear un custom post

  • Quiero crear un plugin que haga un custom post especial, he creado lo que es el custom post, pero ahora necesito hacer el diseño sin tocar el template, pero no se como añadir los archivos para que los detecte. este es el codigo que tengo puesto, si descomento las dos problemas líenas me da error todo el wordpress.

    //require_once WPP_PLUGIN_DIR . '/archive-custom.php';
    //require_once WPP_PLUGIN_DIR . '/single-custom.php';
    add_filter('single_template', function($original){
    
      global $post;
    
      $post_type = $post->post_type;
    
    if($post_type=="custom"){
    
      $base_name = 'single-custom.php';
    
      $template = locate_template($base_name);
    
      if ($template && ! empty($template)) return $template;
    
    }
    
      return $original;
    
    });
    add_filter( "archive_template", function($original){
    
      global $post;
    
      $post_type = $post->post_type;
    
    if($post_type=="custom"){
    
      $base_name = 'archive-custom.php';
    
      $template = locate_template($base_name);
    
      if ($template && ! empty($template)) return $template;
    
    }
    
      return $original;
    
    });
Viendo 14 respuestas - 1 de 14 (de 14 total)
  • Moderador LGrusin

    (@lgrusin)

    Si lo que quieres es una plantilla diferente según el Custom Port Type nada de lo que has hecho es necesario.

    En el foro puedes encontrar más información sobre los archivos involucrados en el Custom Post Type.

    https://es.wordpress.org/support/topic-tag/custom-post-type/

    Un saludo

    no, quiero el custom post independiente de la plantilla, sin importar que se cambien de plantilla, tenga la misma estructura, con su css etc.

    A ver si te entiendo, tú tienes creado tu CPT en un plugin, ¿cierto? Lo que te falta es agregarle estilos a ese plugin con ese CPT, es decir, asociar tu .css al plugin. ¿Entendí bien?

    Me falta lo que es la maquetación del archive y single de ese Custom post, porque con el código que he puesto, que es el que uso cuando monto los templates, no me implementa la maquetación que le pongo en los aechivos.

    Primero quería comentarte respecto al código, que tienes escrito
    //require_once WPP_PLUGIN_DIR . '/archive-custom.php';

    y debería ser WP_PLUGIN_DIR, tienes una letra P de más.

    Luego, lo que yo haría, sería asociar mis .css al plugin, y meter un condicional dentro, para que se carguen en función de si es un archive o un custom o lo que necesites.

    No me había dado cuenta lo de la doble p, lo que menos me importa ahora es el CSS, pero si que quiero es que me use la plantilla, pero no sé si con el add_filte funciona.

    Moderador LGrusin

    (@lgrusin)

    Me refería a plantillas de página, no al tema. Las páginas del Custom Post type las puedes personalizar exactamente como cualquier otro archivo del tema.

    Un saludo

    ya he conseguido que me agarré la plantilla, ahora creo que el problrema que es otro:
    Uncaught Error: Call to a member function have_posts() on null in /home/iglesiae/wp-includes/query.php:767 Stack trace: #

    Creo que estoy usando mal la sintaxis

    no, disculpa no me ha cogido la plantilla, porque la he dejado en blanco y no me la detecta.

    Nadie me puede ayudar?=

    El último error es porque estás haciendo algo como $wp_query->have_posts() y $wp_query tiene un valor nulo, eso es lo que dice el mensaje de error y poco más se puede decir sin ver código.

    Archivo general del plugin:

    <?php
    /**
    * Plugin Name: Predicaciones
    * Plugin URI: 
    * Description: Crear custom post para configurar predicaciones
    * Version: 1.0.1
    * Author: Santiago Galán
    * Author EMAIL: santiagogalan13@gmail.com
    * License: GPL2
    */
    define( 'WPP_PLUGIN', __FILE__ );
    define( 'WPP_PLUGIN_DIR', untrailingslashit( dirname( WPP_PLUGIN ) ) );
    defined( 'ABSPATH' ) or die( '¡Sin trampas!' );
    
    require_once WP_PLUGIN_DIR . '/predicacion-plugin/archive-predicaciones.php';
    require_once WP_PLUGIN_DIR . '/predicacion-plugin/single-predicaciones.php';
    add_filter('single_template', function($original){
    
      global $post;
    
      $post_type = $post->post_type;
    
    if($post_type=="predicaciones"){
    
      $base_name = 'single-predicaciones.php';
    
      $template = locate_template($base_name);
    
      if ($template && ! empty($template)) return $template;
    
    }
    
      return $original;
    
    });
    add_filter( "archive_template", function($original){
    
      global $post;
    
      $post_type = $post->post_type;
    
    if($post_type=="predicaciones"){
    
      $base_name = 'archive-predicaciones.php';
    
      $template = locate_template($base_name);
    
      if ($template && ! empty($template)) return $template;
    
    }
    
      return $original;
    
    });
    ?>

    Archive:

    <?php
    /**
     * The template for displaying archive Predicaciones pages.
     *
     * Learn more: http://codex.wordpress.org/Template_Hierarchy
     *
     */
    
    get_header(); ?>
    
    <div class="row">
    
        <section id="primary" class="content-area">
    
            <div class="large-8 columns">
                
            <main id="main" class="site-main" role="main">
    
            <?php if ( have_posts() ) : ?>
    
                <header class="page-header">
                    <?php
                        the_archive_title( '<h1 class="page-title">', '</h1>' );
                    ?>
                </header><!-- .page-header -->
    
                <?php /* Start the Loop */ ?>
                <?php while ( have_posts() ) : the_post(); ?>
    
                    <?php
                        /* 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.
                         */
                        echo get_field('descripcion');
                    ?>
    
                <?php endwhile; ?>
    
                <?php gateway_paging_nav(); ?>
    
            <?php else : ?>
    
                <?php get_template_part( 'template-parts/content', 'none' ); ?>
    
            <?php endif; ?>
    
            </main><!-- #main -->
    
            </div><!-- .large-8 -->
    
        </section><!-- #primary -->
    
        <div class="large-3 large-offset-1 columns">
            <?php get_sidebar(); ?>
        </div><!-- .large-3 -->
    
    </div><!-- .row -->
    
    <?php get_footer(); ?>

    Post:

    <?php
    /**
     * The template for displaying archive Predicaciones pages.
     *
     * Learn more: http://codex.wordpress.org/Template_Hierarchy
     *
     */
    
    get_header(); ?>
    
    <div class="row">
        <section id="primary" class="content-area">
    
            <div class="large-8 columns">
                
            <main id="main" class="site-main" role="main">
    
            <?php if ( have_posts() ) : ?>
    
                <header class="page-header">
                    <?php
                        the_archive_title( '<h1 class="page-title">', '</h1>' );
                    ?>
                </header><!-- .page-header -->
    
                <?php /* Start the Loop */ ?>
                <?php while ( have_posts() ) : the_post(); ?>
    
                    <?php
                        /* 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() );
                    ?>
    
                <?php endwhile; ?>
    
                <?php gateway_paging_nav(); ?>
    
            <?php else : ?>
    
                <?php get_template_part( 'template-parts/content', 'none' ); ?>
    
            <?php endif; ?>
    
            </main><!-- #main -->
    
            </div><!-- .large-8 -->
    
        </section><!-- #primary -->
    
        <div class="large-3 large-offset-1 columns">
            <?php get_sidebar(); ?>
        </div><!-- .large-3 -->
    
    </div><!-- .row -->
    
    <?php get_footer(); ?>
    

    URL:
    http://new.iglesiaevangelicadesegovia.com/predicaciones/

    El custom post lo he creado con otro plugin, cuando consiga que funcione esto lo implemento en el plugin.

    Así a primera vista no veo nada sospechoso en el código que has puesto, y el enlace a la web muestra otros errores que no tienen que ver con el comentabas.

    De todas formas, la verdad es que ese tipo de templates en un plugin me cuesta verlas. No puedes tener un template en un plugin y confiar en que su estructura HTML/PHP vaya a encajar bien en cualquier theme. Es bastante improbable que pase.

    Si lo que quieres es que tu custom post type siempre aparezca igual, con una estructura y diseño que tu controles desde el plugin y que siga igual aunque se cambie de theme, yo ofrecería algún método a través de páginas, shortcodes, filtros en the_content etc. Yo diría que estas estrategias son más parecidas a las que se suelen seguir en las mayoría de plugins, por ejemplo así lo hacen en WooCommerce, bbPress, etc.

Viendo 14 respuestas - 1 de 14 (de 14 total)
  • El debate ‘Plugin para crear un custom post’ está cerrado a nuevas respuestas.