如何通过它的名字找到依恋?

时间:2013-10-08 作者:Kirix

是否可以通过其名称获取附件id?是否可以立即获得此附件分配给的父帖子?

5 个回复
SO网友:Maruti Mohanty

您必须编写自定义代码才能获取附件id和post\\u parent byname/ slugfilename(如果在上载文件期间未更改)。

将以下代码放入主题functions.php 文件

if( ! ( function_exists( \'wp_get_attachment_by_post_name\' ) ) ) {
    function wp_get_attachment_by_post_name( $post_name ) {
            $args           = array(
                \'posts_per_page\' => 1,
                \'post_type\'      => \'attachment\',
                \'name\'           => trim( $post_name ),
            );

            $get_attachment = new WP_Query( $args );

            if ( ! $get_attachment || ! isset( $get_attachment->posts, $get_attachment->posts[0] ) ) {
                return false;
            }

            return $get_attachment->posts[0];
    }
}
然后,您可以在需要的地方调用函数,如下所示:--

$attachment = wp_get_attachment_by_post_name( $post_name );
// Replace post_name by the name/slug of the attachment
// It will give you an object, which you can render like below to get the ID and post_parent
if ( $attachment ) {
    echo $attachment->ID; // Gives the id of the attachment
    echo $attachment->post_parent; // Gives the post_parent id
    echo $attachment->post_title; // Gives the attachment title.
}

SO网友:Snade

另一种可能的方法是直接使用$wpdb在posts表中使用搜索到的帖子标题和post\\u类型的“附件”进行SQL查询。

function get_attachment_url_by_title( $title ) {
    global $wpdb;

    $attachments = $wpdb->get_results( "SELECT * FROM $wpdb->posts WHERE post_title = \'$title\' AND post_type = \'attachment\' ", OBJECT );
    //print_r($attachments);
    if ( $attachments ){

        $attachment_url = $attachments[0]->guid;

    }else{
        return \'image-not-found\';
    }

    return $attachment_url;
}
// usage:
get_attachment_url_by_title(\'your_image_title\');
请记住,此代码将返回带有此标题的第一个附件。

替代方法,无需SQL查询。大多数情况下更好:

function get_attachment_url_by_title( $title ) {

$attachment = get_page_by_title($title, OBJECT, \'attachment\');
//print_r($attachment);

  if ( $attachment ){

    $attachment_url = $attachment->guid;

  }else{
    return \'image-not-found\';
  }

  return $attachment_url;
}

echo get_attachment_url_by_title(\'your_image_title\');

SO网友:Lukas Heuser

get_page_by_title() 会成功的。

标题为完整URL:

get_page_by_title( pathinfo( \'https://www.example.com/file.jpg\' )[\'filename\'], "OBJECT", \'attachment\' );
如果未找到帖子/附件,则返回WP\\u Post对象或Null。

SO网友:J. Li

基于WordPress Codex,

附件”-附件。虽然默认的WP\\u Query post\\u状态为“publish”,但附件的默认post\\u状态为“inherit”。这意味着除非您还显式地将post\\U状态设置为“继承”或“任何”,否则不会返回任何附件。(参见下文的post\\U状态)

SO网友:Robbiegod

我只是花了几个小时试图解决这个问题。找不到get\\u page\\u by\\u title的文件名@我根据自己的目的修改了他的答案。

我只有文件名,我需要从媒体库获取图像的url。斯奈德离我很近,但即使是他的职能也没有考虑到我的情况。他提供的功能确实让我走上了正确的方向。

我将测试此解决方案,但似乎有效。基本上,我要查找的是guid中的文件名。由于标题去掉了扩展部分并留出了空间,我无法以任何其他方式找到此图像。

关闭以进行更多测试。。。

function get_attachment_url_by_guid( $filename ) {
        global $wpdb;

        $ext = array(".png", ".jpg", ".gif", ".jpeg");
        $filename = str_replace($ext, "", $filename);
        $clean_filename = trim(html_entity_decode(sanitize_title($filename)));

    
        $attachments = $wpdb->get_results( "SELECT guid FROM $wpdb->posts WHERE guid LIKE \'%$clean_filename%\' AND post_type = \'attachment\' ", OBJECT );
        //print_r($attachments);
        if ( $attachments ){    
            $attachment_url = $attachments[0]->guid;    
        }else{
            return \'image-not-found\';
        }   
        return $attachment_url;
}

结束

相关推荐

Resize uploaded images

Possible Duplicate:Resizing all images 我有一个我建立的新闻门户,客户想要不同大小的特色图片。我已经准备好了我想要的第一个尺寸,他们已经发布了大约200多篇帖子,都准备好了这个尺寸。现在,如果我改变大小,它只会在新帖子上改变/或重新上传当前的特色图片(手工操作太多了)。我的问题是,有没有办法调整上传图像的大小?