Tutorial

Schema.org Metatags slowing your Drupal 7 site? Solution!

Often, when doing SEO checkups, SEO specialist come up with adding Schema.org functionality to website. Mostly e-shops of course, leading to better positions on Google search. But since Schema.org standard has so many fields, Drupal tries to add them to Node Edit page - leading to unnecessary slowdown of editing nodes for site editors.

In my case, website became almost unusable. The Product Node Edit subpage had many fields anyway, because it was product and adding another hundreds of metatag fields slowed the editing process even further. 

So the solution for me was to write the custom module to split the editing subpage to two - one for editing the product, and one specifically for editing the metatags. 

Took some time to complete but here is the code:

<?php

function grafeon_metatag_menu() {
  $items['node/%node/metatag_edit'] = array(
    'title' => 'Edit Metatags',
    'page callback' => '_grafeon_metatag_node_edit_form',
    'page arguments' => array('produkt_node_form', $node),
    'access callback' => 'node_access',
    'access arguments' => array('update', 1),
    'weight' => 0,
    'type' => MENU_LOCAL_TASK,
    'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
	'theme arguments' => array('admin_theme'),
	'theme callback' => 'variable_get',
  );
  return $items;
}

function _grafeon_metatag_node_edit_form() {
	
	module_load_include('inc', 'node', 'node.pages'); 
	
	$nid = arg(1);
	$node = node_load($nid);
	
	$form = drupal_get_form("produkt_node_form", $node);
  
	foreach($form as $key => $value) {
		
		if (strpos($key, 'field_') !== false) {
			hide($form[$key]);
		}
		
	}
	
	hide($form["title_field"]);
	hide($form["body"]);
	
	// tabs
	hide($form['options']);
	hide($form['product_catalog']);
	hide($form['path']);
	hide($form['redirect']);
	hide($form['xmlsitemap']);
	hide($form['author']);
	hide($form['comment_settings']);
	hide($form['revision_information']);
	
	return $form;
	
}

// Remove the metatag functionality from native product edit form
function grafeon_metatag_form_alter(&$form, &$form_state, $form_id){
	if ($form_id == 'produkt_node_form' && arg(2) == "edit") {
		hide($form['metatags']);
	}
}

The problematic node type was "Produkt", leading to edit form having ID of "produkt_node_form", so you would need to adjust the code to fit your needs - basicly just replacing the ID, which is always <node_type>_node_form. I am too lazy to make it site-wide. But at least it works.

Pridal/a lubo dňa Ut, 09/20/2022 - 04:32

Might interest you

Tutorial
This one is quick and works the same with any other code provided by third party.
Tutorial
A small bug in Superfish Drupal module causes it to open the submenus on mobile devices but in the same time open the parent link. Which is…

Recommended

Article
32 views
For the past few days I am trying to comprehend why / how this blockchain even gained it'…
Tutorial
95 views
This sketch is quite easy, I used Arduino Nano with OLED 0.96″ display 128×64 resolution…
Tutorial
157 views
While working on a fairly complex website with very complex views setup, including tens…
Tutorial
14 views
In this case we have two options, either we use hook_user_presave() or we can create new…
Tutorial
15 views
When using Swiftmailer under Drupal 8 / 9 it automatically sets the headers for sender to…
Tutorial
7 views
Yes, IOS / Safari is the new internet explorer. Amount of time I spend on debugging…
Tutorial
43 views
There is a very handy function in Drupal 8 / 9, allowing developers refresh view when…
Tutorial
22 views
Often, when doing SEO checkups, SEO specialist come up with adding Schema.org…
Tutorial
174 views
I needed to test my contracts against USDC contract, specifically I needed ERC-721 mint…
Tutorial
85 views
If you are a newbie like I am and struggling with setting the proper MYSQL my.cnf config…
Tutorial
25 views
I had trouble to set this up properly, because documentation is quite misleading or often…
Article
72 views
As the title says, DO NOT in any circumstances install ANY bitcoin price extension to ANY…
Tutorial
278 views
This is (or should be) a working example of sending some Ether between two addresses.…
Module
45 views
This list was fetched from Zapper, with their /v1/token-list endpoint. Which you can…
Tutorial
143 views
In the last months I am being pretty much bombarded by my clients with asking what…