Obtener post por nombre de página o slug
Sé que esto es muy vanguardista, pero tengan paciencia conmigo. He leído que se puede consultar una página por el nombre o slug de la página/post. Estoy intentando hacer esto porque necesito información de una página con un título/slug similar y no tendré la posibilidad de obtener el ID de la página (a menos que haya una forma de convertir un título a un ID).
He probado múltiples variaciones sin éxito. Esta parece la forma más razonable de manejar esto, pero simplemente no funciona.
<?php
$args = array(
'pagename' => 'CM-145',
'post_type' => 'page',
'posts_per_page' => 1,
'numberposts' => 1
); ?>
<div>
<?php
query_posts( $args );
get_template_part( 'loop' );
wp_reset_query();
?>
</div>
El Loop
<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<?php if ( is_front_page() ) { ?>
<h2 class="entry-title"><?php the_title(); ?></h2>
<?php } else { ?>
<h1 class="entry-title"><?php the_title(); ?></h1>
<?php } ?>
<div class="entry-content">
<?php the_content(); ?>
<?php wp_link_pages( array( 'before' => '<div class="page-link">' . __( 'Páginas:', 'twentyten' ), 'after' => '</div>' ) ); ?>
<?php edit_post_link( __( 'Editar', 'twentyten' ), '<span class="edit-link">', '</span>' ); ?>
</div><!-- .entry-content -->
</div><!-- #post-## -->
<?php comments_template( '', true ); ?>
<?php endwhile; // fin del loop. ?>
También he probado 'name' => 'CM-145'
, no estoy seguro si esta es la forma correcta o razonable de realizar esta acción. En última instancia solo necesito extraer la miniatura y el extracto de la página, así que si tienen una mejor idea no duden en hacérmelo saber.
Gracias de antemano.
Hola @Zach Shallbetter:
Si entiendo bien tu pregunta, estás intentando resolver tu problema usando funciones de temas cuando en realidad necesitas utilizar más la API de WordPress. El siguiente código puede copiarse en un archivo test.php
y ejecutarse usando http://tusitio.com/test.php
para que veas cómo funciona (asumiendo que reemplaces http://tusitio.com
con el dominio de tu propio sitio, ¡claro!). Luego lee los comentarios para ver dónde colocar el código para usarlo en tu sitio:
<?php
// La función debe ir en el archivo functions.php de tu tema
function get_excerpt( $post_id ) {
$post = get_post( $post_id );
$excerpt = $post->post_excerpt;
return ( post_password_required($post) ? false :
apply_filters( 'get_the_excerpt', $excerpt ) );
}
include('../wp-load.php');
// Este código va donde necesites obtener y mostrar el extracto y la miniatura
$post = get_page_by_path('CM-145');
$excerpt = get_excerpt($post->ID);
$thumbnail = get_the_post_thumbnail($post->ID);
?>
<div style="width:300px">
<span style="float:right;"><?php echo $thumbnail; ?></span>
<?php echo $excerpt ?>
</div>
Además, me preocupa un poco que puedas estar experimentando un poco del síndrome del "martillo y clavo"; es decir, cuando tienes un problema y solo tienes un martillo, tratas el problema como un clavo cuando tal vez lo que necesitas es encontrar un destornillador.
Específicamente, me preocupa que estés usando una Página para algo que debería ser simplemente una Opción, o quizás al menos un Tipo de Entrada Personalizado. ¿Podrías explicar con más detalle tu caso de uso y por qué has elegido usar una Página?

Absolutamente, actualmente estoy trabajando en http://redesign.openeye.net. Tengo los productos configurados como páginas y todos los demás complementos como publicaciones (videos, software, documentos, etc.). Estos elementos (publicaciones) están categorizados por número de modelo, por lo que múltiples publicaciones pueden compartir un único número de modelo. Tenemos una situación donde un cliente visita la página de soporte, elige la categoría del menú desplegable y luego ve una lista de las "publicaciones" asociadas con ese producto. Lo que me gustaría hacer es extraer la imagen y descripción de la página del producto para colocarlas en la parte superior de esta página.

Además, estoy usando tipos de publicación personalizados, campos y taxonomías bastante vigorosamente. Muy poco de este sitio se genera manualmente. Ah, y disculpa los estilos en línea por todas partes, todavía estoy trabajando en el diseño.

@Zach Shallbetter - ¿Por qué no creas tipos de publicación personalizados 'product'
y 'add-on'
?

Porque entrarían en conflicto con los listados de categorías y dedicamos una gran cantidad de tiempo para que no sea rentable hasta que comience a resolver los errores. Además, el permalink es más bonito http://redesign.openeye.net/products/recorders/e-series/oe2-e480

Para la posteridad, sigo curioso sobre por qué su código, que debería funcionar (y que, por cierto, funciona para mí), no está funcionando.

Siéntete libre de corregir mis inferencias. Generalmente estoy avanzando a ciegas durante todo este proceso.

@Zach Shallbetter - Es completamente posible tener URLs "bonitas" con tipos de posts personalizados, solo para tu información.

cambia get_template_part( 'loop' );
por get_template_part( 'loop','page' );
o inserta manualmente un loop directamente en esa plantilla y comprueba si ese es el problema. por lo demás, tu código es correcto.
*edición- supongo que tu archivo loop tiene algunas comprobaciones condicionales para determinar cómo mostrar publicaciones en diferentes contextos que no se cumplen con tu consulta de página, por lo que no se muestra nada.

Sí, yo también pensé que estaba correcto, pero no quiere devolver ningún resultado en absoluto. Incluso con page en la plantilla. Como mínimo debería devolver el título de la página. Me pregunto si hay algo más que se me está pasando por alto.

Creé una página con el título "CM-145" y copié/pegué tu código. Cuando inspecciono $wp_query, efectivamente se devuelve, pero el loop que publicaste aquí no funciona sin una llamada a the_post();
primero. Como comprobación de cordura, haría print_r($wp_query);
para ver si es un problema de consulta o de loop.
