WP 高级自定义字段:所见即所得插入 link 到媒体

WP Advanced Custom Fields: WYSIWYG Insert link to media

我希望我能正确解释这一点...不幸的是我没有代码可以展示,但我已经进行了全面研究,但找不到任何帮助。作为参考,我也在使用 WordPress 的 ACF 插件。我在 ACF 中将 WYSIWYG 设置为 'Visual Only' 和 'Simple'。

本质上,我正在尝试自定义 WordPress 所见即所得菜单,尤其是 'Insert/Edit link' 按钮操作。当前,当您在所见即所得编辑器中单击该按钮时,它首先会显示一个迷你编辑器,如下所示:

当您点击齿轮图标 'Link Options' 时,它会弹出更多选项,如下所示:

但列表中唯一的链接是页面(或帖子,但该站点没有任何帖子)。

我还想在列表中包含指向媒体文档的链接。 像这样的事情一定是可能的,但我一辈子都想不出在哪里编辑它。我想它一定是 TinyMCE 的一部分,但我不能确定。有人处理过这个吗?

编辑: 其中包括对已接受答案的编辑以查看最终产品。

将这些添加到您的主题 'functions.php'。

// Query for attachments
add_filter( 'wp_link_query_args', 'my_modify_link_query_args' );
function my_modify_link_query_args( $query ) {
    $query['post_status'] = array('publish','inherit');
    return $query;
}

// Link to media file URL instead of attachment page
add_filter( 'wp_link_query', 'my_modify_link_query_results' );  
function my_modify_link_query_results( $results, $query ) {
    foreach ( $results as &$result ) {
        if ( 'Media' === $result['info'] ) {
            $result['permalink'] = wp_get_attachment_url( $result['ID'] );
        }
    }
    return $results;
}

如果没有 Outsource WordPress's answer,我无法解决这个问题,所以我接受了这个问题的答案,但我做了一些调整以满足我的特定需求。以下是更改列表:

  • 我只想要“页面”和“附件”的post_types(没有'post')
  • $result['info'] 已从 'Media' 更新为适当的 MIME 类型
  • 'media' 链接首先按 MIME 类型按字母顺序排序,然后按标题排序,'pages' 始终按标题字母顺序排序
  • 我打算过滤掉某些 MIME 类型但决定不这样做(留在评论中)

这是添加到 functions.php 的最终代码:

// Query for attachments
add_filter( 'wp_link_query_args', 'link_query_args' );
function link_query_args( $query ) {
    $query['post_status'] = array('publish','inherit');
    $query['post_type'] = array('page','attachment');
    return $query;
}

// Link to media file URL instead of attachment page
add_filter( 'wp_link_query', 'link_query_results' );  
function link_query_results( $results ) {
    foreach ( $results as $index => &$result ) {
        if ( $result['info'] === 'Page' ) {
            $pageArr[] = $result;
        }
        if ( $result['info'] === 'Media' ) {
            /*
            // Remove certain MIME types
            if( in_array( get_post_mime_type( $result['ID'] ), array('image/jpeg') )  ){
                unset($results[$index]);
            }
            */
            $result['permalink'] = wp_get_attachment_url( $result['ID'] );
            $result['info'] = get_post_mime_type( $result['ID'] );
            $mediaArr[] = $result;
        }
    }
    usort($pageArr, function($a, $b){
        return strcmp($a['title'], $b['title']);
    });
    array_multisort(array_column($mediaArr, 'info'), SORT_ASC, SORT_STRING, 
                    array_column($mediaArr, 'title'), SORT_ASC, SORT_STRING, 
                    $mediaArr);
    $results = array_merge($pageArr, $mediaArr);
    return $results;
}