Categories

See More
Popular Forum

MBA (4887) B.Tech (1769) Engineering (1486) Class 12 (1030) Study Abroad (1004) Computer Science and Engineering (988) Business Management Studies (865) BBA (846) Diploma (746) CAT (651) B.Com (648) B.Sc (643) JEE Mains (618) Mechanical Engineering (574) Exam (525) India (462) Career (452) All Time Q&A (439) Mass Communication (427) BCA (417) Science (384) Computers & IT (Non-Engg) (383) Medicine & Health Sciences (381) Hotel Management (373) Civil Engineering (353) MCA (349) Tuteehub Top Questions (348) Distance (340) Colleges in India (334)
See More
( 8 months ago )

Wordpress: Custom shortcode to render image with meta data

General Tech Bugs & Fixes
Max. 2000 characters
Replies

usr_profile.png
Shalini Jaiswal

User

( 8 months ago )

 

I was hoping for some wordpress-integrated function to get me the needed values in a few lines of code, but with @disinfor's hint I dug a bit into the wordpress database and came to the following results:

  • wp_posts.post_title is the title of the image
  • wp_posts.post_excerpt is the caption of the image
  • wp_posts.post_content is the content of the image's media page (not relevant here)
  • wp_postmeta.meta_value WHERE meta_key='_wp_attachment_image_alt' is the alt-text of the image

Code below:

function img_shortcode($atts) {
    global $wpdb;
    try {
        $conn = new \PDO("mysql:host=" . constant('DB_HOST') . ";dbname=" . constant('DB_NAME'), constant("DB_USER"), constant("DB_PASSWORD"));
        // set the PDO error mode to exception
        $conn->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

        $sql =  "SELECT post_title, post_excerpt FROM `". $wpdb->prefix . "posts` WHERE ID=". $atts[0];
        $stmt = $conn->prepare($sql);
        $stmt->execute();
        $img = $stmt->fetch(\PDO::FETCH_ASSOC);
        $title = $img['post_title'];
        $caption = $img['post_excerpt'];

        $sql =  "SELECT meta_value FROM `". $wpdb->prefix . "postmeta` WHERE (post_id=". $atts[0] ." AND meta_key='_wp_attachment_image_alt')";
        $stmt = $conn->prepare($sql);
        $stmt->execute();
        $alt = $stmt->fetch(\PDO::FETCH_ASSOC)['meta_key'];
    }
    catch(PDOException $e) {
        echo "Connection failed: " . $e->getMessage();
        return NULL;
    }
    // todo: generate html from $alt, $title and $caption (and optionally further shortcode attributes)
}

add_shortcode('img', 'img_shortcode'); // Signature: [img 126] to render image with media id 126

usr_profile.png
Pooja Bhardwaj

User

( 8 months ago )

My problem: How to pull the media data out of the database in PHP?

I'd like to write a shortcode that renders an image with the alt-text and caption taken automatically from the media database. Usage-example:

[img 126 300]  // [img media-id width]

Intended Output:

what's your interest


forum_ban8_5d8c5fd7cf6f7.gif