Kimliğe göre alıntıyı alın


31

Neden bir başlığın ve diğer birçok öğenin olduğu gibi kimlik numarası ile alıntı yapılamıyor?

Örneğin. get_the_excerpt (İD). $ Post-> post_excerpt işleviyle nasıl kullanılacağını biliyorum, ancak hiçbir girilmezse içeriğin bir kısmını döndürmeyen basit bir şey döndürmez.

Yani, yapmaya çalıştığım şey, eğer bir alıntı varsa ve bu kimliğe sahip bir alıntı yoksa, bunun yerine içeriğin bir kısmını almak için bir miktar içerik varsa, kimliğe göre alıntı yapmaktır.

İnsan bunu nasıl yapar?

Herhangi bir fikir,

Muhteşem ...

DÜZENLE --

Kaynak Kodunu İstediğiniz şekilde döngüleyin.

<?php $stories = get_posts('category_name=feedback&numberposts=4'); 
            foreach ($stories as $post) :
            $title = $post->post_title;
            $excerpt = get_the_excerpt_id($post->ID);
            $thumb = get_the_post_thumbnail($post->ID,array(60, 60, true));?>
              <div class="textstandard_white" style="font-size:14px; line-height:22px; padding-top:10px;"><b><a href="<?php echo get_permalink($post->ID);?>"><?php echo $title;?></a></b></div><div align="left" style="height:18px; width:82px; background:url(http://www.divethegap.com/update/z-images/structure/icons/stars.png) left top no-repeat;"><div id="stars<?php echo $post->ID;?>" align="left" style="height:18px; background:url(http://www.divethegap.com/update/z-images/structure/icons/stars_glow.png) left top no-repeat;">
                  </div>
                  </div>

                  <script type="text/javascript">
                var width<?php echo $post->ID;?> = ((<?php
$Rating = get_post_meta($post->ID, "Rating", true);
echo $Rating;
?> * 20) + '%')
                  $('#stars<?php echo $post->ID;?>').css('width', width<?php echo $post->ID;?>);

                 </script><div class="textstandard_white" style="padding-top:6px; font-size:10px; color:#BBB; padding-bottom:10px; border-bottom:1px dotted #BBB; min-height:70px;"><div style="float:left; padding-right:6px; padding-bottom:6px;"><div style="background:#FFF; border:1px solid #FFF;
border-radius: 4px; -moz-border-radius: 4px ; -webkit-border-radius: 4px; padding:4px;"><a href="<?php echo get_permalink($post->ID);?>"><?php echo $thumb;?></a></div></div>



<?php echo $excerpt;?></div>
              <?php endforeach;?>

tam olarak içeriğin "bir kısmı" nedir?
kaiser

WordPress'deki alıntı işlevi, bir gönderinin alıntı döndürür. Gönderi için bir alıntı yoksa, içeriğin belirli bir sayıda karakterini "..." veya "daha fazla oku" ya da şablon ne sağlarsa verir
Robin I Knight

1
PITA olmak değil, topluluk kuralları imzalara ve standart kapanışlara izin vermez. Kurallara uymak ve Jeff Atwood'un tüm sorularınızı düzenledikten sonra size sert bir mesaj göndermesini önlemek için lütfen "Marvellous" u bir kapanış olarak kullanmayı bırakın . (Lütfen elçiyi
vurmayın

Yanıtlar:


20

Merhaba @ Robin I. Knight:

get_the_excerpt()Eski tasarımı ile bir fonksiyon olarak görüyorum . WordPress kullanımı arttıkça, uygun olmayan ancak farklı verilerin elde edilmesi için yeni fonksiyonların çalıştığı birçok yeni kullanım durumu vardır. Bir örnek, bir $argsdizi işlev seçeneğinin şimdi sıkça kullanılmasıdır .

Ancak ihtiyaçlarınız için düzeltmek kolaydır. İşte kendi functions.phpdosyanızda herhangi bir yere koyabileceğiniz alternatif bir fonksiyon :

function robins_get_the_excerpt($post_id) {
  global $post;  
  $save_post = $post;
  $post = get_post($post_id);
  $output = get_the_excerpt();
  $post = $save_post;
  return $output;
}

Test etmedim ama doğru yaptığımdan eminim. Bu, ihtiyaçlarınızı karşılamıyorsa, lütfen ayrıntılandırın ve belki başka önerilerde bulunabilirim.


İşe yarıyor. Sırala. Çok garip sonuçlar. Kesinlikle işlevini yerine getiriyor ancak sonuçlar garip. Bunu GET_Posts ile birlikte kullanıyorum ve bir nedenden ötürü ilk 2 alma mesajı her zaman aynı. İşte bir link ve ne demek istediğimi göreceksiniz. Sağ taraftaki 4 yazıya bakın. divethegap.com/update/community/feedback/2010/06/steve-riches
Robin I Knight

@Robin I Knight: Lütfen döngü kaynak kodunuzu sorunuza güncelleme olarak gönderin; Kod görmeden kod hata ayıklamak çok zordur. Muhtemelen soruna neden olan bir eklentidir; bir seferde bir tane devre dışı bırakmayı deneyin.
MikeSchinkel 19:11

Yukarıdaki söz konusu kaynak kodunu geri dönün ^ ^
Robin I Knight

BTW İşlevin adını get_the_excerpt_id ($ post_id) olarak değiştirdim
Robin I Knight

@Robin I Knight - Döngünüzde hiçbir şey göremiyorum, fakat setup_postdata($post)@Rarst'ın önerdiği gibi döngünüzün başında arama yapmayı deneyebilirsiniz . Bu işe yaramazsa, devre dışı bırakmanız gereken bir eklenti olabilir; denedin mi Muhtemelen onu çağırmak istemezsiniz get_the_excerpt_id()çünkü WordPress bu işlevi gelecekte ekleyebilir ve sitenizi bozabilir. Ve muhtemelen foreach($stories as $story): global $post; $post = $story;bunun yerine döngüdeki işlevi kullanmadan yapabilirsin .
MikeSchinkel

16

Alıntı mekaniği son derece kafa karıştırıcı. Sorunuza kesin bir cevap değildir, ancak genel olarak Loop'a özgü şablon etiketleri yapmanız gerekiyorsa, döndürdüğünüz diziyle çalışmanız get_posts(), Loop'u aşağıdaki gibi taklit edebilirsiniz:

$stories = get_posts(); 

foreach ($stories as $post) {

    setup_postdata($post);

    // stuff
}
wp_reset_postdata();

Peki ya wp_reset_query (); ?
Ocak'ta cwd

1
@cwd, yalnızca setup_postdata()genel sorgu kullanıldığında etkilenmez ve yalnızca posta verisinin sıfırlanması gerekir.
Rarst

Bu çözüm, gönderiyi başka bir var öğesinde depolamaktan ve başka bir gönderiye ihtiyaç duymadan tümünün daha temiz olmasını sağlamaktan daha temizdir. +1
Barry Kooij

Teşekkürler @Rarst bana yardımcı oldu. Setup_postdata eklenmesi ($ post); sorunlarımı
Simon

8

3.3.0'dan beri yeni bir fonksiyon var: wp_trim_words

Aşağıdaki gibi döngü dışında kullanıyorum:

 <?php if ( $post_id ) {
 $post = get_post( $post_id );
 if ( $post ) { ?>
     <h2><?php echo $post->post_title; ?></h2>
     <p><em><?php echo wp_trim_words( $post->post_content ); ?></em></p>
     <p><strong>This article can only be read by subscribers.</strong></p>
 <?php } } ?>

Bu görünüşte sadece döngü içinde çalışan wp_trim_excerpt ile karıştırılmamalıdır , çünkü dahili olarak the_content () işlevini çağırır.


6

Sadece MikeSchinkel'in cevabına eklemek, ki nedense benim için işe yaramaz. Çalışması için setup_postdata satırını eklemek zorunda kaldım.

function get_the_excerpt( $post_id ){

  global $post;  
  $save_post = $post;
  $post = get_post($post_id);
  setup_postdata( $post ); // hello
  $output = get_the_excerpt();
  $post = $save_post;
  return $output;

}

Bunu döngünün dışında kullanıyorsanız, o zaman devam eden diğer setup_postdata ile etkileşime girmemesi gerektiğini varsayalım.

Şerefe


MikeSchinkel'in cevabını denedim ve bu benim için işe yaramadı. Verilerin ayarlanması veriyi yaptı. 'Setup_postdata' olmadan benim durumumda, işlev üst gönderinin title + alıntılarını döndürdü.
turzifer

2

@ Maxime'in cevabını geliştirmek, bu işe yarar mı?

$post = get_post( $id );

$excerpt = ( $post->post_excerpt ) ? $post->post_excerpt : $post->post_content;

Bana öyle dümdüz geliyor, ama bir şeyleri özlüyor muyum diye merak ediyorum.


1

Eğer TÜM Yayınlarınızın <!--more-->etiketi, o zaman kodunun üzerinde aşağıdaki kullanabilirsiniz:

$sjc_excerpt = explode( '<!--more-->', $post->post_content); 
echo wpautop( $sjc_excerpt[0] );

Tabii ki <!--more-->etiketi olmayan herhangi bir yayınınız varsa, tamamı ile gösterilirler. Benim durumumda çalışıyor ama herkes için değil ...


1

get_the_excerpt()Eski tasarımı ile bir fonksiyon olarak görüyorum . WordPress kullanımı arttıkça, uygun olmayan ancak farklı verilerin elde edilmesi için yeni fonksiyonların çalıştığı birçok yeni kullanım durumu vardır. Bir örnek, bir $argsdizi işlev seçeneğinin şimdi sıkça kullanılmasıdır .

Ancak ihtiyaçlarınız için düzeltmek kolaydır. İşte kendi functions.phpdosyanızda herhangi bir yere koyabileceğiniz alternatif bir fonksiyon :

function robins_get_the_excerpt($post_id) {
   global $post;  
   $save_post = $post;
   $post = get_post($post_id);
   $output = get_the_excerpt();
   $post = $save_post;
   return $output;
}

Sadece MikeSchinkel'in cevabına eklemek, ki nedense benim için işe yaramaz. Çalışması için setup_postdata satırını eklemek zorunda kaldım.


Bunun wp_reset_post_data()döngü içinde çalışması gerekiyor mu ?
Chris Pink,

Görünüşe göre (bu özel evin etrafında gittikten sonra) artık çekirdeğin bir parçası.
Chris Pink,

0

Bu wp_trim_words kullanarak çok kullandığım küçük iki gömlek . Sürekli kendimi kısaltmaya ihtiyaç duyuyorum ve döngünün dışında daha fazla işlevsellik okuyorum. Bazıları bunu faydalı bulabilir. Demek kullandığım şey bu:

  1. POST ID'ye göre Alıntıyı Al
  2. Gönderi İçeriği Al Herhangi bir Seçici ayarlanmamışsa,
  3. Alevin Word uzunluğunu ayarlayın
  4. Read More İçin İçeriği Seçin (Link / Metin)

Bu satır içi, doğrudan düzenlediğim özel şablona koydum.

    //Get Post Object
    $dapost = get_post(POST_ID);              
    //Get the Execerpt
    $my_excerpt = wp_trim_words( apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content  ), "20", "<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>" );

Yıkmak

1. alıntı içeriği

Mesaj Kimliği ile Alıntı Alın, ancak Alıntı Yapılmadıysa Yazı İçeriği Alın.

If / Else PHP stenoyu kullanıyorum .

    $dapost = get_post(POST_ID);    
    apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content

2. Kelime uzunluğu

Alıntıdaki sözcük sayısını 20 olarak ayarlayın.

    "20"

3. ReadMore İçeriğini Seçin (Link / Metin)

   "<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>"

Kullandığım $dapost->guidben dostu URL'ler gerek yoktu çünkü URL'yi almak için, ve DB başka bir çağrı kaçmak istedim. Her zaman get_the_permalink'i kullanabilirsiniz.

Wordpress Belgelerinde wp_trim_words sayfasına bakınız .


0

Bu benim için çalıştı:

$excerpt = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_ide));


-2

Bu daha hızlı:

global $post;
return get_post($post_id)->post_excerpt;

1
Alıntı boş olduğunda değil… soruda belirtildiği gibi.
fuxia

Gerçekten de, bir
istisna

Bu kullanışlı olmadığından reddedildi
Pieter Goosen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.