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;
}
我希望我能正确解释这一点...不幸的是我没有代码可以展示,但我已经进行了全面研究,但找不到任何帮助。作为参考,我也在使用 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;
}