Ottenere un post per nome della pagina o slug

22 apr 2011, 17:58:28
Visualizzazioni: 19.2K
Voti: 4

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.

0
Tutte le risposte alla domanda 2
8

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?

22 apr 2011 19:43:49
Commenti

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.

Zach Shallbetter Zach Shallbetter
22 apr 2011 19:58:52

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 Zach Shallbetter
22 apr 2011 20:01:27

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

MikeSchinkel MikeSchinkel
22 apr 2011 20:29:29

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

Zach Shallbetter Zach Shallbetter
22 apr 2011 20:46:09

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.

Milo Milo
22 apr 2011 20:47:19

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

Zach Shallbetter Zach Shallbetter
22 apr 2011 21:07:42

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

MikeSchinkel MikeSchinkel
23 apr 2011 06:24:01

@Milo - Non sono sicuro se stai chiedendo a Zack o a me né a quale codice ti stai riferendo?

MikeSchinkel MikeSchinkel
23 apr 2011 06:24:32
Mostra i restanti 3 commenti
4

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.

22 apr 2011 18:37:10
Commenti

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.

Zach Shallbetter Zach Shallbetter
22 apr 2011 19:14:46

è tutto il tuo loop? manca the_post();

Milo Milo
22 apr 2011 19:17:10

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.

Milo Milo
22 apr 2011 19:26:03

Scusa la brutta copia, questo è solo il loop predefinito

Zach Shallbetter Zach Shallbetter
22 apr 2011 19:26:14