Wordpress onları görüntülemeden değişkenleri içine yazılan bilgi almak için en iyi yolu

4 Cevap php

Ben bir Wordpress eklentisi, yazı ve mesajların bir dizi üzerinden gitmek (çoğunlukla başlık, permalink ve içerik için) onlardan veri kapmak ve sayfada onları görüntülemeden onlara işleme uygulamak için ihtiyaç duyuyorum.

What I've looked at:

Ben o mesajları almak için get_posts() baktı ettik

getting title via the_title(),
content via the_content(),
and permalink via the_permalink()

Tüm filtreleri zaten uygulanmış sonra ben kullanıcıya görüntülenir olacağını kesin verileri almak ki ben, bu verileri gerektiğini aklınızda tutun. Yukarıdaki fonksiyonların her biri, gerekli filtreler uygulamak ve büyük olan, zaten bazı postprocessing yapmak gibi görünüyor.

The Problem:

Sorun, en azından WP, tüm bu fonksiyonları 2.7.1 sadece her şeyi yankı ve hatta geri dönmek şey yok varsayılan (son anda sürümünü yayınladı). the_title () aslında baskı ve yerine dönmek yok diyor bir bayrak destekler gibi pek

the_title(null, null, false)

Diğer 2, ancak bu tür bayrakları yok ve bu tutarsızlık benim için oldukça şok edici.

Ben ne the_ () fonksiyonlarının her baktı ve ben the_ bir davranış olarak () işlevleri de değiştirebilirsiniz, bu benim kitapta kesmek (veri görüntülemeden diyoruz böylece dışarı bu kodu çekmeye çalıştım her zaman). Bu permalink için çalıştı ama nedense get_the_content için () NULL döndürür. Zaten daha iyi bir yolu olmalı, ben inanıyorum.

So, what is the best way to pull out these values without printing them?

Bazı örnek kod

global $post;
$posts = get_posts(array('numberposts' => $limit));

foreach($posts as $post){
    $title = the_title(null, null, false); // the_title() actually supports a "do not print" flag
    $permalink = apply_filters('the_permalink', get_permalink()); // thanks, WP, for being so consistent in your functions - the_permalink() just prints /s
    $content = apply_filters('the_content', get_the_content()); // this doesn't even work - get_the_content() returns NULL for me
    print "<a href='$permalink'>$title</a><br>";
    print htmlentities($content, ENT_COMPAT, "UTF-8"). "<br>";
}

P.S. Ben de http://stackoverflow.com/questions/570152/what-is-the-best-method-for-creating-your-own-wordpress-loops baktım ve mesaj yoluyla döngüsü için zaten bariz bir şekilde ele ederken, orada çözüm sadece bu verileri yazdırır.

UPDATE: Bu konuda Wordpress ile bir bilet açtım. http://core.trac.wordpress.org/ticket/9868

4 Cevap

Tamam, ben şimdi hepsi dizildi var. Burada nihai sonucu ilgilenen kim için olduğunu:

  • Her yazının verileri) get_posts (tarafından döndürülen dizi yineleme yoluyla ulaşılabilir, ancak bu veriler sadece herhangi bir ara filtrelerden geçirilerek olmadan, veritabanı ne olursa olsun olacaktır
  • Tercih edilen yolu get_the_ fonksiyonlarını kullanarak ve onları uygun bir filtre ile apply_filters bir çağrı () onları sarma verilere erişmektir. Bu şekilde, tüm ara filtreleri uygulanacaktır.

apply_filters('the_permalink', get_permalink())

  • get_the_content(), boş bir dize dönen nedeni görünüşte özel bir çağrı setup_postdata($post); ilk olarak yapılması gerekiyor. Sonra get_the_content() düzgün veri döndürür

Teşekkürler önerileriniz için herkes.

Şey echo the_stuff () WP En fonksiyonlar kendi get_the_stuff () muadili returns bir şey var.

Örnek: get_the_title(), get_permalink() ...

Bunu yapmak için tam yol bulamazsa, her zaman çıkış tamponlama kullanabilirsiniz.

<?php
ob_start();
echo "World";
$world = ob_get_clean();
echo "Hello $world";
?>

Görüntülendiğinde ediliyor zaman her sonrası gönderildiği anda işleme yapmak, ya da herhangi bir neden var mı?

WP eklentileri genellikle bir defada tek bir yazı üzerinde çalışmak, böylece kanca bol böyle şeyler yapmak için vardır.