Utilizarea funcției the_excerpt în fișierul de șablon al unui plugin WordPress

16 iun. 2011, 12:00:10
Vizualizări: 516
Voturi: 0

Î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: ', ' ', '' ),'&nbsp;&nbsp;&nbsp;' . get_the_term_list( $post_id, 'location', 'Locație: ', ' ', '' ),'&nbsp;&nbsp;&nbsp;'.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: ', ' ', '' ),'&nbsp;&nbsp;&nbsp;' . get_the_term_list( $post_id, 'location', 'Locație: ', ' ', '' ),'&nbsp;&nbsp;&nbsp;' . 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: ', ' ', '' ),'&nbsp;&nbsp;&nbsp;' . get_the_term_list( $post_id, 'location', 'Locație: ', ' ', '' ),'&nbsp;&nbsp;&nbsp;' . 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

afișare cu the_excerpt

A doua imagine arată rezultatul fără the_excerpt
afișare fără rezumat

0
Toate răspunsurile la întrebare 1
7

Faci câteva greșeli:

  1. the_excerpt nu utilizează ID-ul postării.
  2. Când modifici variabila globală $post, ar trebui întotdeauna să o resetezi la valoarea inițială.
  3. 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: ', ' ', '' ),'&nbsp;&nbsp;&nbsp;' .get_the_term_list( $post_id, 'location', 'Locație: ', ' ', '' ),'&nbsp;&nbsp;&nbsp;'.get_the_term_list( $post_id, 'region', 'Regiune: ', ' ', '' );
                                            echo '</span></h3>';
                                        } 
                                    ?>
                                            </div><!-- / homepage_props_tax -->
16 iun. 2011 12:21:56
Comentarii

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

MartinJJ MartinJJ
16 iun. 2011 13:01:41

@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 Khan Hameedullah Khan
16 iun. 2011 13:31:59

@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..

MartinJJ MartinJJ
16 iun. 2011 13:37:26

@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 Khan Hameedullah Khan
16 iun. 2011 13:48:58

@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

MartinJJ MartinJJ
16 iun. 2011 13:54:20

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

Hameedullah Khan Hameedullah Khan
16 iun. 2011 17:10:30

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..

MartinJJ MartinJJ
16 iun. 2011 17:42:56
Arată celelalte 2 comentarii