Gönderi içeriğini döngü dışından alın


Yanıtlar:


39

Statik sayfanın nesnesini get_page()döndürmek için kullanabilirsiniz $post:

$page_id = 302;
$page_object = get_page( $page_id );
echo $page_object->post_content;

Düzenle

Benzer şekilde, bir gönderinin nesnesini get_post()döndürmek için kullanabilirsiniz $post:

$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;

Bunu kullanırken kısa kodlar hala çalışıyor mu?
Tim Baas

Sadece olmadığını öğrendim. setup_postdata( $post );Önce kullanın , ondan sonra kullanabilirsinizthe_content();
Tim Baas

4
Sadece koşabilirsinapply_filters( 'the_content', $post_object->post_content );
Nathan Powell

6

yazının içeriğini döngü dışına almak için buna benzer bir şey yazabilirsiniz

global $post;
$content = $post->post_content;

if ( !empty( $content ) ) :
    echo $content;
endif;

3

İçeriğiniz kısa kod içeriyorsa, şunları kullanmalısınız:

$post_id = 22;        
$post_object = get_post( $post_id );        
echo do_shortcode( $post_object->post_content );


Bu sayfa do_shortcode, "Yavaş olabilir" ve "Sadece kısa kodun çağırdığı işlevi kullanabilirsiniz." Demekten kaçınmak için zorunlu bir neden sağlamaz . Bu nedenler sadece en basit senaryolar için en önemsiz olan için geçerlidir. Kısa kod başka bir yerde üretildiğinde veya birden fazla kısa kod veya başka içerik ve işaretlerle karıştırılmış kısa kodlar olduğunda başarısız olur. Zorlayıcı bir sebep olmadan, kaçınmak için ifadeye katılmıyorum do_shortcode. Bu erken optimizasyon gibi kokuyor .
Jeff,

Ayrıca, kodunuzla orijinal kısa kodun kodu arasındaki bağlantıyı da artırır. Kısa kodun yedekleme yöntemi yeniden adlandırılırsa veya imza değişirse, kodunuz bozulur.
Jeff,

1

Tamamlanması için, Tim'in yukarıdaki yorumuna dayanarak inşa edilmiş ve Stephen Harris'in makalesinden esinlenerek , kullanımını sağlayan çözüm the_content()şöyledir:

$post_id = 302;
global $post;
$post = get_post($post_id);
setup_postdata( $post );
the_content();
wp_reset_postdata( $post );

Ve böylece filtreler uygulanır (paragraflar vb. Eklenir) ve kısa kodlar çalışır.


Bu neredeyse tarayıcımı mahvetti: / ve işareti almak ve yardım etmek, ancak hala kısa kodları ayrıştırmıyor.
Zade

0

Hedef posta kimliğinizi (302) bildiğiniz için, döngüden kullanabileceğiniz bu kısa sözdizimini yararlı bulabilirsiniz (performansı diğer alternatif yöntemlerde olduğu gibi hemen hemen aynıdır) :)

echo(get_post_field('post_content',302));

0

get_post_data()Döngünün dışına yazı almak için işlevi kullanabilirsiniz . Bu kodu functions.php dosyasına yerleştirin

function get_post_data($postId) {
    global $wpdb;
    return $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID=$postId");
}

ve daha sonra işlem üzerinde daha fazla kontrol sahibi olmak için bu pasajı ekleyin

<?php $data = get_post_data(302);
    echo $data->post_date;     // post date
    echo $data->post_title;    // post title
    echo $data->post_content;  // post content
    echo $data->comment_count; // comments number
?>

0

Dediğiniz gibi çözümü get_postve ile birlikte kullanabilirsiniz, $post_object->post_contentancak bu yazı nesnesini kullanmadan önce bir onay eklemeyi unutmayın:

function get_post_content( $post_id = null ) {
    $post_object = get_post( $post_id );
    if ( ! $post_object ) { return ''; }
    //else

    return apply_filters('the_content', $post_object->post_content);
}

echo get_post_content( $other_post_id );

-1

Basitçe get_the_content (postId) 'i arayabilirsiniz.

<?php echo get_the_content($postId); ?>

2
Aslında bu mümkün değil. Daha fazla bağlantı olduğunda içerik için ilk argüman
joshcanhelp

-2

wp_reset_postdata();işe yarayacak kullanın .. (düzenlendi)

<?php 
$args = array(
        'post_type' => 'posttype',
        'p' => 'post_id'
       );
$the_query = new WP_Query( $args );
if( have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <?php the_content(); ?>
    <?php endwhile; endif; 
wp_reset_postdata();
?>

posttype "posta", "sayfa" veya özel yazı tipiniz olabilir. İşte p = 302 sizin kimliğinizdir .. Umarım işe yarar.


2
query_postsSayfa işlevlerini bozmanız gerekmedikçe asla kullanmayın . Her zaman kullanın WP_Queryveya get_postsözel sorgular için :-)
Pieter Goosen

evet .. haklısın .. Wp_Query de olabilir .. aynı sonuç bulundu ..
Jahirul Islam Mamun

pre_get_postsFiltre de var ve the_post. Çok fazla detay.
Nathan Powell

-3

X kategorisine içerik koyabilir ve bu şekilde yapmadan önce query_post komutunu kullanabilirsiniz:

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
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.