Chiamare the_excerpt da un file template di un plugin WordPress
Sto cercando di utilizzare the_excerpt all'interno di un file template di un plugin, il plugin è wp-favorite-posts. Di default il plugin mostra solo il titolo del post salvato, sono riuscito a fargli mostrare tutto: termini tassonomici, immagini ecc., ma sto avendo difficoltà con the_excerpt. Quando aggiungo <?php the_excerpt( $post_id ); ?>
nel codice, ottengo un loop continuo del post preferito senza alcun estratto.
Sto usando global $post
così da poter ottenere tutte le informazioni (tranne l'estratto)
<?php
global $post;
if (!empty($user)):
if (!wpfp_is_user_favlist_public($user)):
echo "$user's Favorite Posts.";
else:
echo "$user's list is not public.";
endif;
endif;
if ($wpfp_before):
echo "<p>".$wpfp_before."</p>";
endif;
if ($favorite_post_ids):
foreach ($favorite_post_ids as $post_id) {
$p = get_post($post_id); ?>
<div class="homepage_props">
<div class="homepage_props_inner">
<div class="homepage_propsbanner">
<div class="homepage_new">
<?php if (strtotime($post->post_date) > strtotime('-7 days')) { ?>
<img src="<?php echo get_template_directory_uri(); ?>/images/new.png" alt="ultime inserzioni immobiliari" title="nuove proprietà disponibili" />
<?php } ?>
</div>
<h2>
<span style="float:left; font-weight:bold;">
<?php
if ( 'sales' == get_post_type($post_id) ) {
echo 'Immobile in Vendita';
} elseif ( 'rentals' == get_post_type($post_id) ) {
echo 'Immobile in Affitto';
} elseif ( 'business' == get_post_type($post_id) ) {
echo 'Attività in Vendita</span>';
} elseif ( 'bandb' == get_post_type() ) {
echo 'Bed And Breakfast</span>';
}
?>
</span>
<span style="float:right; font-weight:normal;">
<a href="<?php echo get_permalink($post_id); ?>" title="<?php printf( esc_attr__( 'Link permanente a %s', 'themename' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php echo get_the_title ( $post_id ); ?></a>
</span>
</h2>
</div>
<div class="clear"></div>
<div class="homepage_props_image">
<?php
echo "<a href='".get_permalink($post_id)."'>";
echo get_the_post_thumbnail ( $post_id, 'medium' );
echo "</a>";
?>
</div><!-- / homepage_props_image -->
<div class="homepage_props_info hyphenate">
<!-- qui sto provando a inserire the_excerpt -->
</div><!-- / homepage_props_info -->
<div class="clear"></div>
<div class="homepage_props_tax">
<?php
if ( 'sales' == get_post_type($post_id) ) {
echo '<h3><span style="float:right; font-weight:normal;">' . get_the_term_list( $post_id, 'property_type', 'Tipologia: ', ' ', '' ),' ' . get_the_term_list( $post_id, 'location', 'Località: ', ' ', '' ),' '.get_the_term_list( $post_id, 'region', 'Regione: ', ' ', '' );
} elseif ( 'rentals' == get_post_type($post_id) ) {
echo '<h3><span style="float:right; font-weight:normal;">' . get_the_term_list( $post_id, 'property_type', 'Tipologia: ', ' ', '' ),' ' . get_the_term_list( $post_id, 'location', 'Località: ', ' ', '' ),' ' . get_the_term_list( $post_id, 'region', 'Regione: ', ' ', '' );
} elseif ( 'business' == get_post_type($post_id) ) {
echo '<h3><span style="float:right; font-weight:normal;">' . get_the_term_list( $post_id, 'property_type', 'Tipologia: ', ' ', '' ),' ' . get_the_term_list( $post_id, 'location', 'Località: ', ' ', '' ),' ' . get_the_term_list( $post_id, 'region', 'Regione: ', ' ', '' );
}
?>
</span></h3>
</div><!-- / homepage_props_tax -->
</div><!-- / homepage_props_inner -->
</div><!-- / homepage_props -->
<?php
}
else:
echo $wpfp_options['favorites_empty'];
endif; ?>
<span style="float:left; font-size:0.7em;"><?php wpfp_clear_list_link(); ?></span>
<?php wpfp_cookie_warning(); ?>
Prima immagine mostra il risultato con the_excerpt
Seconda immagine mostra il risultato senza the_excerpt
Stai facendo alcune cose sbagliate:
- the_excerpt non utilizza l'ID del post.
- Quando modifichi il global $post dovresti sempre ripristinarlo al suo valore originale.
- Stavi assegnando il valore di ritorno di get_post a $p che non veniva utilizzato nel tuo codice.
Ho apportato alcune correzioni al tuo codice. Il codice qui sotto è semplicemente il copia-incolla del tuo codice con le mie correzioni, quindi prova il codice sottostante e fammi sapere se hai ancora problemi. Scusa se ho dovuto modificare un po' la formattazione del tuo codice.
<?php
if (!empty($user)):
if (!wpfp_is_user_favlist_public($user)):
echo "Post preferiti di $user.";
else:
echo "La lista di $user non è pubblica.";
endif;
endif;
if ($wpfp_before):
echo "<p>".$wpfp_before."</p>";
endif;
if ($favorite_post_ids):
foreach ($favorite_post_ids as $post_id) {
$p = get_post($post_id);
?>
<div class="homepage_props">
<div class="homepage_props_inner">
<div class="homepage_propsbanner">
<div class="homepage_new">
<?php if (strtotime($p->post_date) > strtotime('-7 days')) { ?>
<img src="<?php echo get_template_directory_uri(); ?>/images/new.png" alt="ultime inserzioni immobiliari" title="nuove proprietà" />
<?php } ?>
</div>
<h2><span style="float:left; font-weight:bold;">
<?php
if ( 'sales' == $p->post_type ) {
echo 'Proprietà in Vendita';
} elseif ( 'rentals' == $p->post_type ) {
echo 'Proprietà in Affitto';
} elseif ( 'business' == $p->post_type ) {
echo 'Attività in Vendita';
} elseif ( 'bandb' == $p->post_type ) {
echo 'Bed And Breakfast';
}
?>
</span>
<span style="float:right; font-weight:normal;">
<a href="<?php echo get_permalink($post_id); ?>" title="<?php printf( esc_attr__( 'Link permanente a %s', 'themename' ), get_the_title( $post_id ) ); ?>" rel="bookmark"><?php echo get_the_title ( $post_id ); ?></a>
</span>
</h2>
</div>
<div class="clear"></div>
<div class="homepage_props_image">
<?php
echo "<a href='".get_permalink($post_id)."'>";
echo get_the_post_thumbnail ( $post_id, 'medium' );
echo "</a>";
?>
</div><!-- / homepage_props_image -->
<div class="homepage_props_info hyphenate">
<?php echo $p->post_excerpt; ?>
</div><!-- / homepage_props_info -->
<div class="clear"></div>
<div class="homepage_props_tax">
<?php
if ( in_array( $p->post_type, array( 'sales', 'rentals', 'business' ) ) ) {
echo '<h3><span style="float:right; font-weight:normal;">' .get_the_term_list( $post_id, 'property_type', 'Tipologia: ', ' ', '' ),' ' .get_the_term_list( $post_id, 'location', 'Località: ', ' ', '' ),' '.get_the_term_list( $post_id, 'region', 'Regione: ', ' ', '' );
echo '</span></h3>';
}
?>
</div><!-- / homepage_props_tax -->

Grazie Hameedullah per aver dedicato del tempo ad aiutarmi, ho provato il codice che hai fornito ma succede ancora la stessa cosa, ho modificato il mio post iniziale per mostrare l'errore, la prima immagine mostra cosa succede quando the_excerpt è incluso nel codice e la seconda immagine mostra come appare quando l'excerpt non è nel codice, sia il tuo metodo che il mio danno lo stesso errore.. saluti

@Martin, ho modificato il codice nella mia risposta per usare $post->post_excerpt
invece di the_excerpt
puoi provarlo per favore per esserne sicuro.

@Hameedullah grazie, questo ha fermato il loop che si vede nelle immagini sopra, ma ha lasciato solo il css e non mostra nessuno dei valori cioè: thumbnail, titoli, excerpt ecc..

@Martin, Cosa intendi con lasciato il css? La formattazione è interrotta o qualcos'altro? Prova echo strip_tags( $post->post_excerpt );

@Hameedullah lasciando solo il css, forse avrei dovuto essere più chiaro e dire che lascia il mio html renderizzato sulla pagina come dovrebbe essere ma nessuna delle dinamiche (testo e thumbnail) viene chiamata quindi mi ritrovo praticamente con un div vuoto ma stilizzato. L'ultimo pezzo di codice che hai fornito sopra è lo stesso, non ottengo alcun output via php.. scusa per il tempo che stai dedicando a questo, ma è apprezzato.. sono completamente perso su come risolverlo onestamente

@Martin controlla il nuovo codice aggiornato. Ho fatto ulteriore pulizia. E non devi più modificare la variabile globale $post.

eccellente... ora restituisce i dati come dovrebbe, ma solo se la tabella post_excerpt viene utilizzata in wp-admin non viene restituito nulla se questa tabella è vuota, ma posso fare qualcosa al riguardo aggiungendola ai miei parametri post (posting dal frontend) dal contenuto dei post e riducendo la lunghezza.. Molte molte grazie per il tuo tempo su questo Hameedullah è molto apprezzato..
