Utilizarea funcției the_excerpt în fișierul de șablon al unui plugin WordPress
Încerc să utilizez funcția the_excerpt din interiorul unui fișier de șablon al unui plugin, anume wp-favorite-posts. În mod implicit, pluginul afișează doar titlul postărilor salvate. Am reușit să obțin afișarea tuturor elementelor - termeni de taxonomie, imagine etc. - dar am probleme cu the_excerpt. Când adaug <?php the_excerpt( $post_id ); ?>
în cod, obțin o buclă infinită de postări favorite fără rezumat.
Folosesc global $post
pentru a obține toate informațiile (cu excepția rezumatului)
<?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="cele mai noi proprietăți listate" title="proprietăți noi adăugate" />
<?php } ?>
</div>
<h2>
<span style="float:left; font-weight:bold;">
<?php
if ( 'sales' == get_post_type($post_id) ) {
echo 'Proprietate de vânzare';
} elseif ( 'rentals' == get_post_type($post_id) ) {
echo 'Proprietate de închiriat';
} elseif ( 'business' == get_post_type($post_id) ) {
echo 'Afacere de vânzare</span>';
} elseif ( 'bandb' == get_post_type() ) {
echo 'Pensiune</span>';
}
?>
</span>
<span style="float:right; font-weight:normal;">
<a href="<?php echo get_permalink($post_id); ?>" title="<?php printf( esc_attr__( 'Link permanent către %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">
<!-- aici încerc să adaug 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', 'Tip proprietate: ', ' ', '' ),' ' . get_the_term_list( $post_id, 'location', 'Locație: ', ' ', '' ),' '.get_the_term_list( $post_id, 'region', 'Regiune: ', ' ', '' );
} elseif ( 'rentals' == get_post_type($post_id) ) {
echo '<h3><span style="float:right; font-weight:normal;">' . get_the_term_list( $post_id, 'property_type', 'Tip proprietate: ', ' ', '' ),' ' . get_the_term_list( $post_id, 'location', 'Locație: ', ' ', '' ),' ' . get_the_term_list( $post_id, 'region', 'Regiune: ', ' ', '' );
} elseif ( 'business' == get_post_type($post_id) ) {
echo '<h3><span style="float:right; font-weight:normal;">' . get_the_term_list( $post_id, 'property_type', 'Tip proprietate: ', ' ', '' ),' ' . get_the_term_list( $post_id, 'location', 'Locație: ', ' ', '' ),' ' . get_the_term_list( $post_id, 'region', 'Regiune: ', ' ', '' );
}
?>
</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 imagine arată rezultatul cu the_excerpt
A doua imagine arată rezultatul fără the_excerpt
Faci câteva greșeli:
- the_excerpt nu utilizează ID-ul postării.
- Când modifici variabila globală $post, ar trebui întotdeauna să o resetezi la valoarea inițială.
- Atribuiai valoarea returnată de get_post variabilei $p care nu era folosită în codul tău.
Am făcut câteva corectări în codul tău. Codul de mai jos este doar o copie a codului tău cu corecturile mele, așa că încearcă codul de mai jos și spune-mi dacă mai ai probleme. Îmi pare rău că a trebuit să modific puțin formatarea codului tău.
<?php
if (!empty($user)):
if (!wpfp_is_user_favlist_public($user)):
echo "Postările favorite ale lui $user.";
else:
echo "Lista lui $user nu este 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($p->post_date) > strtotime('-7 days')) { ?>
<img src="<?php echo get_template_directory_uri(); ?>/images/new.png" alt="ultimele oferte de proprietăți" title="ultimele oferte de proprietăți" />
<?php } ?>
</div>
<h2><span style="float:left; font-weight:bold;">
<?php
if ( 'sales' == $p->post_type ) {
echo 'Proprietate de vânzare';
} elseif ( 'rentals' == $p->post_type ) {
echo 'Proprietate de închiriat';
} elseif ( 'business' == $p->post_type ) {
echo 'Afacere de vânzare';
} elseif ( 'bandb' == $p->post_type ) {
echo 'Pensiune';
}
?>
</span>
<span style="float:right; font-weight:normal;">
<a href="<?php echo get_permalink($post_id); ?>" title="<?php printf( esc_attr__( 'Legătură permanentă către %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', 'Tip proprietate: ', ' ', '' ),' ' .get_the_term_list( $post_id, 'location', 'Locație: ', ' ', '' ),' '.get_the_term_list( $post_id, 'region', 'Regiune: ', ' ', '' );
echo '</span></h3>';
}
?>
</div><!-- / homepage_props_tax -->

Mulțumesc Hameedullah pentru timpul acordat pentru ajutor, am încercat codul tău furnizat și același lucru se întâmplă în continuare, am editat postul meu inițial pentru a afișa eroarea, prima imagine arată ce se întâmplă când the_excerpt este inclus în cod și a doua imagine arată cum arată când excerpt nu este în cod, atât metoda ta cât și a mea duc la aceeași eroare.. salutări

@Martin, am făcut modificarea în codul din răspunsul meu pentru a folosi $post->post_excerpt
în loc de the_excerpt
poți să încerci te rog doar să fii sigur.

@Hameedullah mulțumesc, asta a oprit bucla care este afișată în imaginile de mai sus, dar a lăsat doar css-ul și nu arată niciuna dintre valorile adică: thumbnail, titluri, excerpt etc..

@Martin, Ce vrei să spui prin "a lăsat css-ul"? Formatarea este stricată sau altceva? Poți încerca echo strip_tags( $post->post_excerpt );

@Hameedullah prin a lăsa doar css-ul, poate ar fi trebuit să fiu mai clar și să spun că lasă html-ul meu randat pe pagină așa cum ar trebui, dar niciunul dintre elementele dinamice (textul și thumbnail-ul) nu sunt apelate, așa că practic rămân cu un div gol dar stilizat. Ultima bucată de cod pe care ai furnizat-o deasemenea nu obține niciun output prin php deloc.. îmi pare rău pentru timpul pe care îl petreci cu asta, dar este apreciat.. sunt complet pierdut în legătură cu cum să rezolv asta, să fiu sincer

@Martin verifică codul actualizat nou. Am mai făcut o curățare. Și nu mai trebuie să modifici variabila globală $post.

excelent... acum returnează datele așa cum ar trebui, dar doar dacă tabelul post_excerpt este folosit în wp-admin, nu se returnează nimic dacă acest tabel este gol, dar pot face ceva cu asta adăugându-l la parametrii mei de postare (postare din față) din conținutul postărilor și reducând lungimea.. Mulțumesc foarte mult pentru timpul acordat acestui subiect Hameedullah, este foarte apreciat..
