如何将所有用户默认为无附件链接?

时间:2017-06-09 作者:WebElaine

我的网站通过Yoast SEO禁用了图像附件页,但我们的一些内容编辑器经常插入带有链接选项的图像:附件页。

如果我单独与他们交谈,我会让他们插入一幅图像,并特别选择“链接到:无”,从那时起,他们的默认设置是“链接到无”,这是根据需要而定的。这意味着每当他们插入一个图像时,它只是一个图像。

很明显,WP将此默认值存储在某个地方,但我一直无法找到它。

我使用了/wp admin/options。要更改的phpimage_default_link_type 设置为“无”,但对于默认设置为附件页的用户,该设置没有更改。它们仍然是这样,除非我手动选择“无”并使用它们的配置文件插入图像。

希望有一个MySQL查询或一些函数覆盖,这样当我网站上的任何用户添加图像时,他们都会默认为“无链接”。我不想更改输出-我想实际删除<a></a> 当任何人添加图像时,在编辑器中围绕图像的标记。

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

这是最后一个对我有用的非JS方法:

Step 1: update sitewide option

您可以通过多种方式来实现这一点。由于设置为一次性操作,我选择通过访问https://www.example.com/wp-admin/options.php . 我搜索了“image\\u default\\u link\\u type”并将其设置为“none”(单词none,not null),然后保存了设置。

不幸的是,保存的usermeta覆盖了此站点范围的设置,因此此时问题链接仍在继续出现。

Step 2: update all users

非常感谢@Milo揭示了它存储在-usermeta下的位置,该位置隐藏在一个选项查询字符串中,这些选项可能以任何顺序出现。

理论上,这可能是一次性操作,或者如果您认为用户可能会不断更新其默认值,您可以将其设置为在钩子上运行,如wp_dashboard_setup 因此,每次有人查看仪表板时,所有用户的“urlbutton”选项都会被删除,这会导致站点使用站点范围内的“image\\u default\\u link\\u type”。我选择在仪表板视图上运行。

add_action(\'wp_dashboard_setup\', \'wpse_update_user_defaults\');
function wpse_update_user_defaults() {
    $users = get_users();
    foreach($users as $user) {
        // pull current settings
        $wpUserSettings = get_user_meta($user->ID, \'wp_user-settings\', true);   
        // if \'wp_user-settings\' is present with a \'urlbutton\' value
        if(!empty($wpUserSettings) && strpos($wpUserSettings, \'urlbutton\') !== false) {
            // if \'urlbutton\' is not the only setting
            if(strpos((string)$wpUserSettings, \'&\') !== false) {
                // if there\'s an & before (may or may not have an & after)
                $firstUpdate = preg_replace("/&urlbutton=[^&]*/", \'\', $wpUserSettings);
                // if there\'s an & after (but not before)
                $secondUpdate = preg_replace("/^urlbutton=[^&]*&/", \'\', $firstUpdate);
                // save updated meta
                update_user_meta($user->ID, \'wp_user-settings\', $secondUpdate);
            // if \'urlbutton\' is the only setting
            } else {
                delete_user_meta($user->ID, \'wp_user-settings\');
            }
        }
    }
}
整理好后,我使用以下查询搜索存在问题的现有帖子:

SELECT * FROM wp_posts WHERE post_content LIKE "%rel=\\"attachment%"
然后从那里手动编辑所有帖子以删除标签。

结束