it-swarm.com.de

Holen Sie sich einen Auszug mit get_the_excerpt außerhalb einer Schleife

Ich habe einen Code, der get_the_title() aufruft und funktioniert, aber get_the_excerpt() gibt leer zurück. Wie kann ich es zum Laufen bringen?

Dieser Code befindet sich in einem Plugin namens "WP Facebook Open Graph-Protokoll". Hier ist der Teil, den ich ändern möchte:

if (is_singular('post')) {
  if (has_excerpt($post->ID)) {
    echo "\t<meta property='og:description' content='".esc_attr(strip_tags(get_the_excerpt($post->ID)))."' />\n";
  }else{
    echo "\t<meta property='og:description' content='". [?] ."' />\n";
  }
}else{
  echo "\t<meta property='og:description' content='".get_bloginfo('description')."' />\n";
}

Hier schlägt has_excerpt immer fehl und get_the_excerpt($post->ID) funktioniert nicht mehr (veraltet).

Wie kann ich den Auszug dort anzeigen?

ps: Ich benutze auch das "Advanced Excerpt" -Plugin

30
ariel

habe es mit my_excerpt($post->post_content, get_the_excerpt()) und mit der Funktion my_excerpt() von Mit wp_trim_excerpt den_excerpt () außerhalb der Schleife bekommen

5
ariel

Ich habe diese Frage gefunden, als ich nach dem ohne Post-Objekt gesucht habe.

Meine zusätzlichen Forschungen haben diese raffinierte Technik ergeben:

$text = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_id));

27
cale_b

Da Sie anscheinend bereits über das Post-Objekt verfügen, für das Sie den Auszug benötigen, können Sie die Arbeit erzwingen:

setup_postdata( $post );
$excerpt = get_the_excerpt();

Die Funktion setup_postdata() globalisiert das Objekt $post und stellt es für die reguläre alte Schleifenfunktion zur Verfügung. Wenn Sie sich innerhalb der Schleife befinden, rufen Sie the_post() auf und es richtet die Dinge für Sie ein. Außerhalb der Schleife müssen Sie sie manuell erzwingen.

21
EAMann

Versuche dies:

Erstelle eine neue Funktion in functions.php und rufe sie von überall auf.

function get_excerpt_by_id($post_id){
    $the_post = get_post($post_id); //Gets post ID
    $the_excerpt = $the_post->post_content; //Gets post_content to be used as a basis for the excerpt
    $excerpt_length = 35; //Sets excerpt length by Word count
    $the_excerpt = strip_tags(strip_shortcodes($the_excerpt)); //Strips tags and images
    $words = explode(' ', $the_excerpt, $excerpt_length + 1);

    if(count($words) > $excerpt_length) :
        array_pop($words);
        array_Push($words, '…');
        $the_excerpt = implode(' ', $words);
    endif;

    $the_excerpt = '<p>' . $the_excerpt . '</p>';

    return $the_excerpt;
}

Hier ist ein Beitrag, der den Code beschreibt.

18
Withers Davis

Jetzt können Sie einfach die Funktion get_the_excerpt( $postID ) verwenden. Seit: WordPress 4.5.0 hat den Parameter $post eingeführt.

8
docker

Dies ist für den Fall, dass Sie get_the_excerpt() außerhalb der Schleife verwenden möchten:

function custom_get_excerpt($post_id) {
    $temp = $post;
    $post = get_post($post_id);
    setup_postdata($post);

    $excerpt = get_the_excerpt();

    wp_reset_postdata();
    $post = $temp;

    return $excerpt;
}
1
Gixty

Falls Sie das Post-Objekt nicht haben, finden Sie hier eine kurze Funktion wie die von Withers.

function get_excerpt_by_id($post_id){
    $the_post = get_post($post_id);
    $the_excerpt = $the_post->post_excerpt; 
    return $the_excerpt;
}
1
OKParrothead

Wenn Sie den Auszug automatisch aus dem Inhalt in einer Zeile generieren möchten, können Sie wp_trim_words folgendermaßen verwenden:

// 30 is the number of words ehere
$excerpt = wp_trim_words(get_post_field('post_content', $post_id), 30);
1
Picard