DAPATKAN kutipan dengan ID

31

Mengapa seseorang tidak bisa mendapatkan kutipan dengan ID seperti dengan judul dan sebagian besar elemen lainnya.

misalnya. get_the_excerpt (ID). Saya tahu bagaimana menggunakannya dengan fungsi $ post-> post_excerpt tapi itu tidak mengembalikan bagian dari konten jika tidak ada kutipan yang dimasukkan, tidak menghasilkan apa-apa.

Jadi yang saya coba lakukan adalah mendapatkan kutipan dengan ID jika ada kutipan, dan jika tidak ada kutipan dengan ID itu tetapi ada beberapa konten, untuk mendapatkan beberapa konten sebagai gantinya.

Bagaimana orang melakukannya?

Ada ide,

Luar biasa ...

EDIT -

Ulangi Kode Sumber sebagaimana Diminta.

<?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;?>
Robin I Knight
sumber
apa sebenarnya "sebagian" dari konten?
kaiser
Fungsi kutipan di wordpress mengembalikan kutipan posting. Jika posting tidak memiliki kutipan, ia mengembalikan sejumlah karakter konten yang diikuti oleh '...' atau 'baca lebih lanjut' atau apa pun yang disediakan template
Robin I Knight
1
Bukan untuk menjadi PITA tetapi aturan komunitas melarang tanda tangan dan penutupan standar. Agar mematuhi aturan dan menghindari Jeff Atwood mengirimi Anda pesan tegas setelah mengedit semua pertanyaan Anda, silakan berhenti menggunakan "Luar Biasa" sebagai penutup. (Dan tolong jangan tembak kurirnya)
MikeSchinkel

Jawaban:

20

Hai @Robin I. Knight:

Saya melihat get_the_excerpt()sebagai fungsi dengan desain warisan. Seiring dengan meningkatnya penggunaan WordPress, ada banyak kasus penggunaan baru yang tidak sesuai, tetapi fungsi yang lebih baru untuk mendapatkan data berbeda dilakukan. Salah satu contoh adalah penggunaan $argsberbagai opsi fungsi yang sekarang sering digunakan .

Tetapi mudah untuk memperbaikinya untuk kebutuhan Anda. Berikut adalah fungsi alternatif yang dapat Anda gunakan yang dapat Anda tempatkan di functions.phpfile tema Anda :

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;
}

Saya belum mengujinya tetapi cukup yakin saya melakukannya dengan benar. Jika ini tidak memenuhi kebutuhan Anda, mohon jelaskan dan mungkin saya dapat membuat saran lain.

MikeSchinkel
sumber
Berhasil. Semacam. Hasil yang sangat aneh. Sudah pasti menjalankan fungsinya tetapi hasilnya aneh. Saya menggunakannya bersamaan dengan GET_Posts dan karena alasan tertentu 2 posting teratas selalu sama. Ini ada tautan dan Anda akan mengerti maksud saya. Lihatlah 4 tulisan di sebelah kanan. divethegap.com/update/community/feedback/2010/06/steve-riches
Robin I Knight
@Robin I Knight: Silakan posting kode sumber loop Anda sebagai pembaruan untuk pertanyaan Anda; sangat sulit untuk men-debug kode tanpa melihat kode. Mungkin juga plugin yang menyebabkan masalah; coba nonaktifkan satu per satu.
MikeSchinkel
Ulangi kode sumber yang dimaksud di atas ^^
Robin I Knight
BTW Saya mengubah nama fungsi menjadi get_the_excerpt_id ($ post_id)
Robin I Knight
@Robin I Knight - Saya tidak melihat apa pun di loop Anda, tetapi Anda dapat mencoba menelepon setup_postdata($post)di awal loop Anda, seperti yang disarankan @Rarst. Jika itu tidak berhasil, mungkin itu adalah plugin yang harus Anda nonaktifkan; Sudahkah Anda mencobanya? Dan Anda mungkin tidak ingin menyebutnya get_the_excerpt_id()karena WordPress dapat menambahkan fungsi itu di masa depan dan menghancurkan situs Anda. Dan Anda mungkin bisa melakukannya tanpa fungsi di loop dengan menggunakan foreach($stories as $story): global $post; $post = $story;sebagai gantinya.
MikeSchinkel
16

Mekanisme kutipan sangat membingungkan. Ini bukan jawaban yang tepat untuk pertanyaan Anda, tetapi secara umum jika Anda perlu membuat tag templat, khusus untuk Loop, bekerja dengan array yang dikembalikan oleh get_posts()Anda dapat meniru Loop seperti ini:

$stories = get_posts(); 

foreach ($stories as $post) {

    setup_postdata($post);

    // stuff
}
wp_reset_postdata();
Jarang
sumber
bagaimana dengan wp_reset_query (); ?
cwd
1
@ cwd jika hanya menggunakan setup_postdata()kueri global tidak terpengaruh dan hanya data pos perlu direset.
Paling lambat
Solusi ini membagikan lebih bersih daripada menyimpan posting di var lain dan meminta posting lain hanya untuk membuatnya global. +1
Barry Kooij
Terima kasih @Rarst yang membantu saya keluar. Menambahkan setup_postdata ($ post); menyelesaikan masalah saya
Simon
8

Ada fungsi baru sejak 3.3.0: wp_trim_words

Saya menggunakannya di luar loop sebagai berikut:

 <?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 } } ?>

Ini tidak harus bingung dengan wp_trim_excerpt yang tampaknya hanya berfungsi di dalam loop, karena ia memanggil the_content () secara internal.

lkraav
sumber
6

Hanya untuk menambah jawaban MikeSchinkel, yang karena alasan tertentu tidak akan berhasil untuk saya. Saya harus menambahkan baris setup_postdata untuk membuatnya berfungsi.

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;

}

Saya berasumsi jika Anda menggunakan ini di luar loop maka seharusnya tidak mengganggu setup_postdata lain yang terjadi.

Tepuk tangan

danbrown
sumber
Saya mencoba jawaban MikeSchinkel dan itu tidak berhasil untuk saya. Menyiapkan data posting melakukan trik. Dalam kasus saya tanpa 'setup_postdata', fungsi mengembalikan judul + kutipan dari pos induk.
turzifer
2

Membangun jawaban @ Maxime, apakah ini akan berhasil?

$post = get_post( $id );

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

Tampaknya cukup mudah bagi saya, tetapi saya bertanya-tanya apakah saya kehilangan sesuatu.

Dominic P
sumber
1

Jika SEMUA posting Anda memiliki <!--more-->tag, maka Anda dapat menggunakan yang berikut dengan kode Anda di atas:

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

Tentu saja jika Anda memiliki posting yang tidak memiliki <!--more-->tag, mereka akan ditampilkan secara keseluruhan. Bekerja dalam situasi saya, tetapi tidak untuk semua ...

Stephen Cronin
sumber
1

Saya melihat get_the_excerpt()sebagai fungsi dengan desain warisan. Seiring dengan meningkatnya penggunaan WordPress, ada banyak kasus penggunaan baru yang tidak sesuai, tetapi fungsi yang lebih baru untuk mendapatkan data berbeda dilakukan. Salah satu contoh adalah penggunaan $argsberbagai opsi fungsi yang sekarang sering digunakan .

Tetapi mudah untuk memperbaikinya untuk kebutuhan Anda. Berikut adalah fungsi alternatif yang dapat Anda gunakan yang dapat Anda tempatkan di functions.phpfile tema Anda :

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;
}

Hanya untuk menambah jawaban MikeSchinkel, yang karena alasan tertentu tidak akan berhasil untuk saya. Saya harus menambahkan baris setup_postdata untuk membuatnya berfungsi.

Jude
sumber
Apakah ini perlu wp_reset_post_data()bekerja di dalam loop?
Chris Pink
Rupanya (setelah berkeliling rumah khusus ini) sekarang bagian dari inti.
Chris Pink
0

Ini adalah dua baris kecil yang saya gunakan banyak menggunakan wp_trim_words . Saya terus-menerus menemukan diri saya membutuhkan singkatan dan membaca lebih banyak fungsi di luar loop. Orang lain mungkin menganggap ini berguna. Jadi ini yang saya gunakan untuk:

  1. Dapatkan Kutipan dengan ID POST
  2. Dapatkan Konten Posting Jika tidak ada Kutipan yang ditetapkan,
  3. Tetapkan panjang kata Kutipan dari kata
  4. Pilih Konten untuk Baca Lebih Lanjut (Tautan / Teks)

Saya menempatkan inline ini, langsung di template kustom yang saya edit.

    //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>" );

Kerusakan

1. Konten kutipan

Dapatkan Kutipan dengan ID Posting tetapi, dapatkan Konten Posting Jika tidak ada Kutipan yang ditetapkan.

Saya menggunakan steno If / Else PHP .

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

2. Panjang kata

Atur jumlah kata dalam Kutipan ke 20

    "20"

3. Pilih Konten ReadMore (Tautan / Teks)

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

Saya biasa $dapost->guidmendapatkan URL, karena saya tidak perlu URL yang ramah, dan ingin menghindari panggilan lain ke DB. Anda selalu dapat menggunakan get_the_permalink.

Lihat wp_trim_words di Dokumentasi Wordpress.

Brev Tiw
sumber
0

Ini bekerja untuk saya:

$excerpt = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_ide));
Rijo KP
sumber
-2

Ini lebih cepat:

global $post;
return get_post($post_id)->post_excerpt;
Maxime Kieffer
sumber
1
Tidak ketika kutipannya kosong ... seperti yang disebutkan dalam pertanyaan.
fuxia
Memang tidak ketika suatu
pengecualian
Diturunkan karena ini tidak berguna
Pieter Goosen