web-dev-qa-db-fra.com

Obtenir le titre et l'URL de la publication parent jointe

Objectif : À partir de mon image.php, j'affiche l'image de la pièce jointe et certaines descriptions. Je veux aussi obtenir le message de l'endroit où il a été posté à l'origine. Je n'ai besoin que du titre et de l'URL pour pouvoir vous relier à partir du message original.

Problème : Il n'affiche pas le titre et l'URL de l'article correct. Au lieu de cela, il affiche le premier et le dernier message que j'ai posté. Lorsque je modifie le numéro en "1" au lieu de "-1", le nom change simplement en premier ou en dernier post.

Code : À partir de ce message: Trouver le message auquel une pièce jointe est attachée

<?php
    // Get all image attachments
    $all_images = get_posts( array(
    'post_type' => 'attachment',
    'numberposts' => -1,
    ) );
    // Step through all image attachments
    foreach ( $all_images as $image ) {
        // Get the parent post ID
        $parent_id = $image->post_parent;
        // Get the parent post Title
        $parent_title = get_the_title( $parent_id );
        // Get the parent post permalink
        $parent_permalink = get_permalink( $parent_id );
    }

    echo "This image is posted to: <a href='".$parent_permalink ."' >".$parent_title."</a>";
?>
2
vanduzled

Toutes les pièces jointes ont un post-parent auquel vous pouvez accéder avec $post->post_parent à l'intérieur de la boucle ou get_queried_object()->post_parent à l'extérieur de la boucle sur vos pages image.php ou similaires. ( Voir ma question ici et le répondre par @gmazzap pourquoi vous devriez plutôt éviter $post en dehors de la boucle )

Maintenant que vous avez l'identifiant post parent, il est facile de réécrire votre fonction: ( CAVEAT: Untested )

function get_parent_post_anchor()
{
    /*
     * Make sure we are on an attachment page, else bail and return false
     */ 
    if ( !is_attachment() )
        return false;

    /*
     * Get current attachment object
     */
    $current_attachment = get_queried_object();

    /*
     * Get the permalink of the parent
     */
    $permalink = get_permalink( $current_attachment->post_parent );

    /*
     * Get the parent title
     */
    $parent_title = get_post( $current_attachment->post_parent )->post_title;

    /*
     * Build the link
     */
    $link = '<a href="' . $permalink  . '"  title="' . $parent_title . '">' . $parent_title . '</a>';

    return $link;
}

Vous pouvez ensuite l'utiliser comme suit

echo get_parent_post_anchor();
1
Pieter Goosen