在页面上删除Yoast WordPress SEO

时间:2014-06-24 16:34:26

标签: wordpress wordpress-plugin

我想删除某个页面上的Yoast WordPress SEO,因为它与另一个插件有冲突。

我尝试将下面的代码添加到我的functions.php中,但似乎没有用,任何帮助都表示赞赏。

谢谢

function remove_wpseo(){
if ( is_page(944)) {
global $wpseo_front;
remove_action( 'wp_head', array($wpseo_front, 'head'), 2 );
}
}
add_action('wp_enqueue_scripts','remove_wpseo');

4 个答案:

答案 0 :(得分:2)

@jhashane答案是正确的,可以直接回答该问题。但是,只要Yoast是活动的并已安装,这也会删除<tite>标记和其他默认的worpdress元数据。 它只会杀死Yoast处理的输出

在大多数情况下,

禁用Yoast 组件 可能是一种更好的方法。冲突通常与Yoast接管某些元数据(特别是类型或社交开放图)有关。

我们花费数小时来了解新的14.0版本。从Yoast SEO 14.0开始,该插件更像是丹麦乐高游戏,并以“ presenters” 建立了head meta标签。

EX:删除页面ID 123上输出的所有社交媒体组件:

function intervik_wpseo_frontend_presenters($presenters){

    /* set your conditional(s) */
    if(!is_singular(123)) return $presenters;

    /* return all WITHOUT Open_Graph and Twitter presenters on $page_id = 123 */
    
    if($matches = preg_grep('/Open_Graph|Twitter/', $presenters)) return array_diff($presenters, $matches);
        else return $presenters;

}
add_filter('wpseo_frontend_presenter_classes', 'intervik_wpseo_frontend_presenters', 10, 1);

此示例中的过滤器很晚。您仍然可以使用单个元或架构等过滤器来过滤内容配置和设置。并且当您部分地想手动禁用配置时,以页面为单位,在源代码中删除Yoast的“块”:

function intervik_wpseo_frontend_presenters($presenters){

    /* REMOVE ONE exactly presenters (example: Canonical) */
    if(($key = array_search('Yoast\WP\SEO\Presenters\Canonical_Presenter', $presenters)) !== false){
        unset($presenters[$key]);
    }
    return $presenters;
}
add_filter('wpseo_frontend_presenter_classes', 'intervik_wpseo_frontend_presenters', 10, 1);

删除页面上的所有 文档标题和说明

function intervik_wpseo_frontend_presenters($presenters){

    $keep[] = 'Yoast\WP\SEO\Presenters\Title_Presenter';
    $keep[] = 'Yoast\WP\SEO\Presenters\Meta_Description_Presenter';
    $keep[] = 'Yoast\WP\SEO\Presenters\Robots_Presenter';
    
    /* remove ALL, except title, description and robots on PAGES */
    if(is_page()) return $keep;
        else return $presenters;
}
add_filter('wpseo_frontend_presenter_classes', 'intervik_wpseo_frontend_presenters', 10, 1);

在这种情况下,您应该使用wpseo_title等过滤器来启用或禁用Yoast 内容,并在某些选定的帖子或页面上使用Wordpress默认内容。

某些meta仍然保留旧的过滤器,以打开或关闭不同的“分组” 输出,例如add_filter('wpseo_output_twitter_card', '__return_false' );,例如Facebook是opengraph的一部分,由其他社交媒体。没有显式的Facebook opengraph过滤器。将来,我们将拥有更多的社交媒体和其他标签共享组件。

让我们玩积木吧。

默认的默认演示者 :(转储$presenters

array(27) {
  [0]=>
  string(39) "Yoast\WP\SEO\Presenters\Title_Presenter"
  [1]=>
  string(50) "Yoast\WP\SEO\Presenters\Meta_Description_Presenter"
  [2]=>
  string(40) "Yoast\WP\SEO\Presenters\Robots_Presenter"
  [3]=>
  string(43) "Yoast\WP\SEO\Presenters\Googlebot_Presenter"
  [4]=>
  string(41) "Yoast\WP\SEO\Presenters\Bingbot_Presenter"
  [5]=>
  string(43) "Yoast\WP\SEO\Presenters\Canonical_Presenter"
  [6]=>
  string(42) "Yoast\WP\SEO\Presenters\Rel_Prev_Presenter"
  [7]=>
  string(42) "Yoast\WP\SEO\Presenters\Rel_Next_Presenter"
  [8]=>
  string(51) "Yoast\WP\SEO\Presenters\Open_Graph\Locale_Presenter"
  [9]=>
  string(49) "Yoast\WP\SEO\Presenters\Open_Graph\Type_Presenter"
  [10]=>
  string(50) "Yoast\WP\SEO\Presenters\Open_Graph\Title_Presenter"
  [11]=>
  string(56) "Yoast\WP\SEO\Presenters\Open_Graph\Description_Presenter"
  [12]=>
  string(48) "Yoast\WP\SEO\Presenters\Open_Graph\Url_Presenter"
  [13]=>
  string(54) "Yoast\WP\SEO\Presenters\Open_Graph\Site_Name_Presenter"
  [14]=>
  string(62) "Yoast\WP\SEO\Presenters\Open_Graph\Article_Publisher_Presenter"
  [15]=>
  string(59) "Yoast\WP\SEO\Presenters\Open_Graph\Article_Author_Presenter"
  [16]=>
  string(67) "Yoast\WP\SEO\Presenters\Open_Graph\Article_Published_Time_Presenter"
  [17]=>
  string(66) "Yoast\WP\SEO\Presenters\Open_Graph\Article_Modified_Time_Presenter"
  [18]=>
  string(50) "Yoast\WP\SEO\Presenters\Open_Graph\Image_Presenter"
  [19]=>
  string(54) "Yoast\WP\SEO\Presenters\Open_Graph\FB_App_ID_Presenter"
  [20]=>
  string(46) "Yoast\WP\SEO\Presenters\Twitter\Card_Presenter"
  [21]=>
  string(47) "Yoast\WP\SEO\Presenters\Twitter\Title_Presenter"
  [22]=>
  string(53) "Yoast\WP\SEO\Presenters\Twitter\Description_Presenter"
  [23]=>
  string(47) "Yoast\WP\SEO\Presenters\Twitter\Image_Presenter"
  [24]=>
  string(49) "Yoast\WP\SEO\Presenters\Twitter\Creator_Presenter"
  [25]=>
  string(46) "Yoast\WP\SEO\Presenters\Twitter\Site_Presenter"
  [26]=>
  string(40) "Yoast\WP\SEO\Presenters\Schema_Presenter"
}

最后,这是“与其他插件发生冲突” 的示例。当插件“群组”限制页面时,我们需要删除打开的图形。我们不想在这里分享或提供元分享。要么,Yoast都不应将此页面添加到站点地图中,并且必须将漫游器设置为noindex。所有这些都是由我们所讨论的页面上的自定义元决定的。

/* Disable YOAST components output on selected pages by custom meta */
function intervik_wpseo_frontend_presenters($presenters){
    
    if(is_singular()){
        global $post;
        $meta = get_post_meta($post->ID, 'example_custom_field', true);
        if($meta){
            add_filter('wpseo_json_ld_output', '__return_false');
            add_filter('wpseo_robots', function(){
                return 'noindex,nofollow';
            }, 30, 1);
            if($matches = preg_grep('/Open_Graph|Twitter/', $presenters)) $presenters = array_diff($presenters, $matches);
        }
    }
    return $presenters;
}
add_filter('wpseo_frontend_presenter_classes', 'intervik_wpseo_frontend_presenters', 10, 1);

站点地图案例:我们仍然需要对站点地图进行单独的过滤,因为它可能是由ajax或cron /加载的,而不是作为头部输出呈现的:

/* -------------------- */
// DISABLE SITEMAP EXAMPLE

function intervik_wpseo_sitemap_entry_exclude($url, $type, $object){
    /* Types can be = 'term', 'post', 'user' */
    if($type == 'post'){
        $meta = get_post_meta($object->ID, 'example_custom_field', true);
        if($meta) return false;
    }
    return $url;
}
add_filter('wpseo_sitemap_entry', 'intervik_wpseo_sitemap_entry_exclude', 30, 3);

以上示例显示了过滤器和演示者的工作方式 控制Yoast的输出。添加类似的模块 YOAST woocommerce YAOST Local 为您提供了更多的演示者,可以使用/添加或删除。而 14个API 的最好部分, 提供您自己的演示者

请评论以添加其他方法或技巧。

答案 1 :(得分:1)

排队不是删除操作的正确时机,请改为使用template_redirect

add_action('template_redirect','remove_wpseo');

function remove_wpseo(){
    if ( is_page(944)) {
        global $wpseo_front;
        remove_action( 'wp_head', array($wpseo_front, 'head'), 2 ); // <-- check priority
    }
}

检查插件用于添加wp_head操作的优先级,因为删除必须相同,否则为空。

答案 2 :(得分:1)

如果有人想知道为什么上述方法在升级后仍然无法使用,这是从14.0版本起禁用Yoast SEO输出的新方法

add_action( 'template_redirect', 'remove_wpseo' );

function remove_wpseo() {
    if ( is_page ( 944 ) ) {
        $front_end = YoastSEO()->classes->get( Yoast\WP\SEO\Integrations\Front_End_Integration::class );

        remove_action( 'wpseo_head', [ $front_end, 'present_head' ], -9999 );
    }
}

希望这会有所帮助!

答案 3 :(得分:0)

以防有人仍然需要这个。这对我有用。如果是博文,请将“页面”更改为“发布”。不要试图完全抛弃Yoast,只需隐藏元框。

add_action( 'add_meta_boxes', 'remove_post_meta_boxes', 11 );

function remove_post_meta_boxes() {
    if( isset( $_GET['post'] ) && $_GET['post'] == '22' ) {
        remove_meta_box( 'wpseo_meta', 'page', 'normal' );
    }
}