Ottenere un post per nome della pagina o slug
Sono consapevole che questa sia una richiesta molto avanzata, ma seguitemi. Ho letto che è possibile interrogare una pagina usando il nome della pagina/post o lo slug. Sto provando a farlo perché ho bisogno di informazioni da una pagina con un titolo/slug simile e non avrò modo di ottenere l'ID della pagina (a meno che non esista un modo per convertire un titolo in un ID).
Ho provato diverse varianti senza successo. Questo sembra il modo più ragionevole per gestire la situazione, ma semplicemente non funziona.
<?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>
Il 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">' . __( 'Pagine:', 'twentyten' ), 'after' => '</div>' ) ); ?>
<?php edit_post_link( __( 'Modifica', 'twentyten' ), '<span class="edit-link">', '</span>' ); ?>
</div><!-- .entry-content -->
</div><!-- #post-## -->
<?php comments_template( '', true ); ?>
<?php endwhile; // fine del loop. ?>
Ho anche provato 'name' => 'CM-145'
, non sono sicuro se questo sia il modo corretto o ragionevole per eseguire questa azione. In definitiva ho solo bisogno di recuperare la miniatura e l'estratto della pagina, quindi se avete un'idea migliore non esitate a farmelo sapere.
Grazie in anticipo.
Ciao @Zach Shallbetter:
Se ho capito bene la tua domanda, stai cercando di risolvere il tuo problema utilizzando funzioni di tematizzazione quando in realtà dovresti utilizzare maggiormente le API di WordPress. Il seguente codice può essere copiato in un file test.php
ed eseguito tramite http://tuosito.com/test.php
per farti vedere come funziona (supponendo che tu sostituisca http://tuosito.com
con il dominio del tuo sito, ovviamente!) Poi leggi i commenti per capire dove inserire il codice per utilizzarlo nel tuo sito:
<?php
// La funzione dovrebbe essere inserita nel file functions.php del tuo 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');
// Questo codice va dove hai bisogno di ottenere e visualizzare l'estratto e 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>
Inoltre, sono un po' preoccupato che tu stia sperimentando un po' la sindrome del "martello e chiodo"; cioè quando hai un problema e hai solo un martello, tratti il problema come un chiodo quando forse ciò di cui hai bisogno è trovare un cacciavite?
Nello specifico, sono preoccupato che tu stia utilizzando una Pagina per qualcosa che dovrebbe essere semplicemente un'Opzione, o forse almeno un Custom Post Type? Puoi spiegare più in dettaglio il tuo caso d'uso e perché hai scelto di utilizzare una Pagina?

Assolutamente, sto attualmente lavorando su http://redesign.openeye.net. Ho impostato i prodotti come pagine e tutti gli altri componenti aggiuntivi come post (video, software, documenti, ecc.). Questi elementi (post) sono categorizzati per numero di modello in modo che più post possano condividere un singolo numero di modello. Abbiamo una situazione in cui un cliente visita la pagina di supporto, seleziona la categoria dal menu a discesa e poi vede un elenco dei "post" associati a quel prodotto. Quello che vorrei fare è estrarre l'immagine e la descrizione della pagina del prodotto per inserirle in cima a questa pagina.

Inoltre, sto utilizzando in modo intensivo tipi di post personalizzati, campi personalizzati e tassonomie. Gran parte di questo sito non è generato manualmente. Oh, e scusa per gli stili inline ovunque, sto ancora lavorando al design.

@Zach Shallbetter - Perché non creare dei tipi di post personalizzati 'product'
e 'add-on'
?

Perché entrerebbero in conflitto con gli elenchi delle categorie e abbiamo investito un'enorme quantità di tempo, quindi non è conveniente fino a quando non inizierò a risolvere i bug. Inoltre, il permalink è più carino http://redesign.openeye.net/products/recorders/e-series/oe2-e480

Per amor di completezza, sono ancora curioso di sapere perché il suo codice, che dovrebbe funzionare (e tra l'altro, funziona per me), non funziona.

Sentiti libero di correggere le mie deduzioni. In generale, sto procedendo alla cieca in tutto questo processo.

@Zach Shallbetter - È assolutamente possibile avere URL "belli" con i custom post type, giusto per informazione.

cambia get_template_part( 'loop' );
in get_template_part( 'loop','page' );
oppure inserisci manualmente un loop direttamente in quel template e verifica se quello è il problema. il tuo codice è altrimenti corretto.
*modifica - presumo che il tuo file loop abbia alcuni controlli condizionali per determinare come visualizzare i post in contesti diversi che non vengono soddisfatti dalla tua query di pagina, quindi non viene visualizzato nulla.

Sì, anch'io pensavo fosse corretto, ma non vuole restituire alcun risultato. Anche con la pagina nel template. Al minimo dovrebbe restituire il titolo della pagina. Mi chiedo se c'è qualcos'altro che mi sfugge.

Ho creato una pagina con il titolo "CM-145" e ho copiato/incollato il tuo codice. Quando ispeziono $wp_query, viene effettivamente restituito, ma il loop che hai postato qui non funziona senza una chiamata a the_post();
prima. Come controllo di sanità mentale, farei print_r($wp_query);
per vedere se è un problema di query o di loop.
