Soporte » WordPress Avanzado » Deshabilitar single.php para un Custom Pot Type

  • Resuelto luisazu

    (@luisazu)


    Hola a todos,

    Estoy intentando crear un sección de opiniones en un theme de WordPress creado por mí. He creado un custom post type llamado «Opiniones» donde yo publico todas las opiniones de clientes junto con su foto, para luego mostrarlas mediante el loop en mi index.php.

    Mi problema es que estas entradas que creo en el Custom Post Type enlazan con el single.php. Me gustaría poder deshabilitar que estás entradas se abriesen individualmente en single.php ya que estas opiniones solo se mostrarían en el index y no quiero que se muestre cada una por separada en el single.php.

    Necesito ayuda urgente porque ya no se que hacer. Si hay otra solución para crear este área soy todo oídos ;).

Viendo 8 respuestas - de la 1 a la 8 (de un total de 8)
  • Hola luisazu.

    No sé si entiendo bien el problema, ¿Quieres mostrar ese CPT en el listado general pero si haces click sobre uno de ellos no quieres ir al single? Si alguien hace click en el título de dicho post en el listado general dónde iría entonces? ¿Lo redireccionarías a index?

    Iniciador del debate luisazu

    (@luisazu)

    Eso es, lo que quiero es que wordpress no generé el permalink. LO que quiero es mostrar las entradas (opiniones) de ese CPT en un lugar específico de la página, en este caso el home, pero no necesito ni quiero que se generé el permalink, porque no quiero ver esa opinión individualmente en el archivo single.php.

    Un saludo, y muchas gracias por ayudar, me trae un poco de cabeza esto 😉

    Bueno, así a bote pronto creo que te podría funcionar lo siguiente (para que no te genere el permalink ya es algo más delicado y lo mismo tampoco te merece la pena):

    add_action('template_redirect', 'luisazu_nombre_de_funcion' );
    function luisazu_nombre_de_funcion() {
    	if ( is_single() && get_post_type() == 'el-slug-de-tu-cpt-que-usaste-en-register_post_type' ) {
    		wp_redirect( home_url() );
    		exit;
    	}
    }

    Lo que hace el código es que justo antes de cargar la plantilla, si va a cargar la plantilla single.php y además el CPT del post actual es el slug de tu CPT, redirecciona a la home.

    Ya me dices a ver qué tal.

    Iniciador del debate luisazu

    (@luisazu)

    Funciona perfectamente! Pero probé esta solución que también funciona. A ver que opinas.

    A la hora de crear el CPT establezco los siguientes argumentos a false:

    'public' => false,
        'publicly_queryable' => false,
        'has_archive' => false,

    – He comprobado, que a la hora de crear una entrada dentro del CPT en el editor no se genera, ni aparece el permalink.
    – Si accedo al permalink (single.php) escribiéndolo manualmente en la barra de direcciones del navegador me devuelve error 404 como que no existe.
    – Como no estaba muy seguro si al no aparecer el permalink en el editor, realmente no se crearía, lo verifiqu accediendo al sitemap.xml, generado por el plugin de Yoast y verifique que cuando establezco estos valores a false no añadía las url!!

    Y el loop sería:

    $wp_query->query(array(  'post_type' => 'opiniones' ,'posts_per_page' => 10)); ?> y para taxonomias
    $wp_query->query(array('categoria_opiniones' => 'socios','post_type' => 'opiniones','posts_per_page' => 10)); ?>

    Creo que no se me escapa nada, y quedaría todo correcto. Me gustaría saber tu opinión por si se me escapara algo, sobre todo cara al SEO.

    Un saludo

    Ah, claro, también es otra solución. Lo que no sabía es que estabas usando una WP_Query propia.

    De todas formas me parece que si public es false, publicly_queryable ya no hace falta ponerlo pero hablo de memoria.

    Si es de cara al SEO, pues no soy quién para responderte porque no soy un experto en la materia pero creo que lo malo de la segunda opción es que la siguiente URL no será válida:

    tusitio.com/opiniones

    Y a lo mejor Google la entiende, ni idea.

    De todas formas me alegro de que te funcione.

    Un saludo.

    Iniciador del debate luisazu

    (@luisazu)

    No entiendo muy bien lo que quieres decir con esto 🙁

    la segunda opción es que la siguiente URL no será válida:

    tusitio.com/opiniones

    Y a lo mejor Google la entiende, ni idea.

    En esta caso las opiniones se muestran en el index y no tiene otra página llamada opiniones, con lo cual al acceder a tusitio.com/opiniones, salta error 404 porque esa página no existe.

    Pero en otro caso si tengo las opiniones en otra página y accede perfectamente a tusitio.com/opiniones. En este caso lo he creado así.

    1. Pagina que se llama opiniones, es decir, tusitio.com/opiniones
    2. Dentro de la página ejecuto el loop al CPT.
    3. Implanto la solución que te indique y no abre en single.php.

    No se si me explico 🙁

    PD: Tu solución sería más conveniente si se generará el single.php, entonces redireccionas y google indexa a donde yo le llevo con la redirección 301, pero al no existir no creo que tenga problema, pero tampoco estoy 100% seguro.

    De todas formas esa función me la guardo!

    Un saludo, y muchas gracias!

    Sí, no me he explicado bien. Al final crear una página llamada opiniones y meterle el bucle creado por ti mismo a la vez que public es false para el CPT, es la mejor solución.

    Iniciador del debate luisazu

    (@luisazu)

    okey gracias por todo 😉

Viendo 8 respuestas - de la 1 a la 8 (de un total de 8)
  • El debate ‘Deshabilitar single.php para un Custom Pot Type’ está cerrado a nuevas respuestas.