我想删除某个页面上的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');
答案 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' );
}
}