从WordPress链接构建器中排除帖子类型

时间:2013-09-25 作者:urok93

我创建了一个自定义帖子类型,参数“public”设置为true。这是因为我必须让它可以在插件中访问,这些插件可以帮助您为后期显示构建查询,例如视图(工具集的一部分)插件。

另一方面,当我创建一个新的帖子或页面并使用链接生成器时,我不希望这种帖子类型的条目显示在那里的搜索框中。有没有办法实现这个目标?

2 个回复
最合适的回答,由SO网友:birgire 整理而成

版本(<;=3.6.1它看起来像wp_link_query() 用于在“链接生成器”中按或链接到现有内容时显示内部帖子/页面:

Link builder

wp_link_query() 定义于/wp-includes/class-wp-editor.php.

通过wp_ajax_wp_link_ajax(), 在文件中定义/wp-admin/includes/ajax-actions.php.

这些函数没有任何用于更改查询的显式筛选器。

版本3.7(?)

看起来在引入过滤器的过程中出现了一些补丁wp_link_query_args

您可以在此处查看:

http://core.trac.wordpress.org/ticket/18042

里程碑设置为3.7, 所以这可能是你的幸运版本;-)

如果是这种情况,那么您可能会通过以下方式解决此问题:

示例1:

如果要手动列出自定义帖子类型:

/**
 * Filter the link query arguments to change the post types. 
 *
 * @param array $query An array of WP_Query arguments. 
 * @return array $query
 */
function my_custom_link_query( $query ){

    // change the post types by hand:
    $query[\'post_type\'] = array( \'post\', \'pages\' );  // Edit this to your needs

    return $query; 
}

add_filter( \'wp_link_query_args\', \'my_custom_link_query\' );
示例2:如果您只想删除一个自定义帖子类型,但保留所有其他类型,那么您可以尝试:

/**
 * Filter the link query arguments to change the post types. 
 *
 * @param array $query An array of WP_Query arguments. 
 * @return array $query
 */
function my_custom_link_query( $query ){

    // custom post type slug to be removed
    $cpt_to_remove = \'news\';      // Edit this to your needs

    // find the corresponding array key
    $key = array_search( $cpt_to_remove, $query[\'post_type\'] ); 

    // remove the array item
    if( $key )
        unset( $query[\'post_type\'][$key] );

    return $query; 
}

add_filter( \'wp_link_query_args\', \'my_custom_link_query\' );
我用的是演示弹头\'news\'.

SO网友:Matt Kaye

下面是如何从“编辑链接”对话框中删除帖子类型数组:

function removeCustomPostTypesFromTinyMCELinkBuilder($query){
    $key = false;

    $cpt_to_remove = array(
        \'cpt_one\',
        \'cpt_two\',
        \'cpt_three\'
    );

    foreach ($cpt_to_remove as $custom_post_type) {
        $key = array_search($custom_post_type, $query[\'post_type\']);
        if($key){
            unset($query[\'post_type\'][$key]);
        } 
    }
    return $query; 
}
add_filter( \'wp_link_query_args\', \'removeCustomPostTypesFromTinyMCELinkBuilder\' );

结束

相关推荐

如何防止tinyMCE编辑器在文本编辑器中完全加载?

我正在研究一个主题。其中部分有编辑模式:使用CodeMirror的语法新模式两种本机模式(视觉和文本编辑器)我有一个奇怪的场景,tinyMCE加载到文本编辑器上,这意味着按钮等类似于视觉编辑器。是否有一个WP挂钩,我可以使用它来防止它完全加载到文本编辑器中我只需要使用本机文本区域,而不需要这些tinyMCE功能。