Closed drill-lancer closed 3 years ago
0.60.1⇒1.00⇒0.61.3⇒1.03 で目次ブロックが破損
<!-- wp:image {"align":"center","id":328,"sizeSlug":"large","linkDestination":"none"} -->
<div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://www.drill-lancer.com/wordpress/wp-content/uploads/media/Lightning-Skin-Fort.jpg" alt="" class="wp-image-328"/></figure></div>
<!-- /wp:image -->
<!-- wp:paragraph -->
<p>この記事では、Lightning / Lightning Pro のスキンの一つである Fort II のヘッダーの固定を Origin 風にする方法について解説します。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>このカスタマイズを施すと、下記画像のような状態でヘッダーが固定されます。</p>
<!-- /wp:paragraph -->
<!-- wp:image {"id":324,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="https://www.drill-lancer.com/wordpress/wp-content/uploads/media/Fort2_Origin_Prefix-1024x239.jpg" alt="" class="wp-image-324"/></figure>
<!-- /wp:image -->
<!-- wp:vk-blocks/table-of-contents-new {"renderHtml":"\u003cli class=\u0022vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2\u0022 data-reactroot=\u0022\u0022\u003e\u003ca href=\u0022#vk-htags-3893dff7-b972-47df-a74e-2b1167c83fba\u0022 class=\u0022vk_tableOfContents_list_item_link\u0022\u003e\u003cspan class=\u0022vk_tableOfContents_list_item_link_preNumber\u0022\u003e1. \u003c/span\u003eFort II のヘッダー固定を Origin 風にするには?\u003c/a\u003e\u003c/li\u003e\u003cli class=\u0022vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2\u0022 data-reactroot=\u0022\u0022\u003e\u003ca href=\u0022#vk-htags-41813ae9-e1e1-48f2-8b91-c3f1867ad0b7\u0022 class=\u0022vk_tableOfContents_list_item_link\u0022\u003e\u003cspan class=\u0022vk_tableOfContents_list_item_link_preNumber\u0022\u003e2. \u003c/span\u003eFort II のヘッダー固定を Origin 風にするコード\u003c/a\u003e\u003c/li\u003e\u003cli class=\u0022vk_tableOfContents_list_item vk_tableOfContents_list_item-h-3\u0022 data-reactroot=\u0022\u0022\u003e\u003ca href=\u0022#vk-htags-364c5d19-d421-44b3-b1fb-f45b71e6bbbd\u0022 class=\u0022vk_tableOfContents_list_item_link\u0022\u003e\u003cspan class=\u0022vk_tableOfContents_list_item_link_preNumber\u0022\u003e2.1. \u003c/span\u003e子テーマの functions.php に記述するコード\u003c/a\u003e\u003c/li\u003e\u003cli class=\u0022vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2\u0022 data-reactroot=\u0022\u0022\u003e\u003ca href=\u0022#vk-htags-5c6d5433-bceb-4122-b817-cc16a9c80d2b\u0022 class=\u0022vk_tableOfContents_list_item_link\u0022\u003e\u003cspan class=\u0022vk_tableOfContents_list_item_link_preNumber\u0022\u003e3. \u003c/span\u003eまとめ\u003c/a\u003e\u003c/li\u003e\u003cli class=\u0022vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2\u0022 data-reactroot=\u0022\u0022\u003e\u003ca href=\u0022#vk-htags-ec532a88-543a-4f97-883b-8e1a5744a7b9\u0022 class=\u0022vk_tableOfContents_list_item_link\u0022\u003e\u003cspan class=\u0022vk_tableOfContents_list_item_link_preNumber\u0022\u003e4. \u003c/span\u003e更新履歴\u003c/a\u003e\u003c/li\u003e"} -->
<div class="wp-block-vk-blocks-table-of-contents-new vk_tableOfContents vk_tableOfContents-style-default tabs"><div class="tab"><div class="vk_tableOfContents_title">目次</div><input type="checkbox" id="chck1"><label class="tab-label vk_tableOfContents_openCloseBtn button_status button_status-open" for="chck1"></label><ul class="vk_tableOfContents_list tab_content-open"><li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2" data-reactroot=""><a href="#vk-htags-3893dff7-b972-47df-a74e-2b1167c83fba" class="vk_tableOfContents_list_item_link"><span class="vk_tableOfContents_list_item_link_preNumber">1. </span>Fort II のヘッダー固定を Origin 風にするには?</a></li><li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2" data-reactroot=""><a href="#vk-htags-41813ae9-e1e1-48f2-8b91-c3f1867ad0b7" class="vk_tableOfContents_list_item_link"><span class="vk_tableOfContents_list_item_link_preNumber">2. </span>Fort II のヘッダー固定を Origin 風にするコード</a></li><li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-3" data-reactroot=""><a href="#vk-htags-364c5d19-d421-44b3-b1fb-f45b71e6bbbd" class="vk_tableOfContents_list_item_link"><span class="vk_tableOfContents_list_item_link_preNumber">2.1. </span>子テーマの functions.php に記述するコード</a></li><li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2" data-reactroot=""><a href="#vk-htags-5c6d5433-bceb-4122-b817-cc16a9c80d2b" class="vk_tableOfContents_list_item_link"><span class="vk_tableOfContents_list_item_link_preNumber">3. </span>まとめ</a></li><li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2" data-reactroot=""><a href="#vk-htags-ec532a88-543a-4f97-883b-8e1a5744a7b9" class="vk_tableOfContents_list_item_link"><span class="vk_tableOfContents_list_item_link_preNumber">4. </span>更新履歴</a></li></ul></div></div>
<!-- /wp:vk-blocks/table-of-contents-new -->
<!-- wp:heading {"className":"is-style-drill-heading-01"} -->
<h2 class="is-style-drill-heading-01" id="vk-htags-3893dff7-b972-47df-a74e-2b1167c83fba">Fort II のヘッダー固定を Origin 風にするには?</h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>今回やるべきことは下記の3つです。</p>
<!-- /wp:paragraph -->
<!-- wp:group {"className":"is-style-vk-group-solid vk-has-vivid-cyan-blue-color"} -->
<div class="wp-block-group is-style-vk-group-solid vk-has-vivid-cyan-blue-color"><div class="wp-block-group__inner-container"><!-- wp:list {"className":"is-style-vk-arrow-mark vk-has-vivid-cyan-blue-color"} -->
<ul class="is-style-vk-arrow-mark vk-has-vivid-cyan-blue-color"><li>Fort II のヘッダー固定を解除 ( 必須 )</li><li>Origin のヘッダー固定を復活 ( 必須 )</li><li>Origin のヘッダーの伸縮を復活 ( 任意 )</li></ul>
<!-- /wp:list --></div></div>
<!-- /wp:group -->
<!-- wp:paragraph -->
<p>上記は全て 子テーマの functions.php で行います。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Origin のヘッダー伸縮を ON にするとスクロール時にヘッダーがびろ~んと一瞬動きます。</p>
<!-- /wp:paragraph -->
<!-- wp:heading {"className":"is-style-drill-heading-01"} -->
<h2 class="is-style-drill-heading-01" id="vk-htags-41813ae9-e1e1-48f2-8b91-c3f1867ad0b7">Fort II のヘッダー固定を Origin 風にするコード</h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>Fort II のヘッダー固定を Origin 風にするコードは下記のとおりです。</p>
<!-- /wp:paragraph -->
<!-- wp:heading {"level":3,"className":"is-style-drill-heading-03"} -->
<h3 class="is-style-drill-heading-03" id="vk-htags-364c5d19-d421-44b3-b1fb-f45b71e6bbbd">子テーマの functions.php に記述するコード</h3>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>子テーマの functions.php には下記を記述します。</p>
<!-- /wp:paragraph -->
<!-- wp:loos-hcb/code-block {"langType":"php","langName":"PHP","fileName":"functions.php"} -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-php" data-file="functions.php" data-lang="PHP"><code>/**
* Header Prefix Setting for Fort II
*/
function lightning_disable_fort2_header_prefix() {
// Fort II のヘッダー固定を解除 ( 必須 ).
remove_filter( 'lightning_localize_options', 'lightning_fort_add_js_option', 10, 1 );
// Origin のヘッダー固定を復活 ( 必須 ).
remove_filter( 'lightning_headfix_enable', 'ltg_fort_headfix_disabel' );
// Origin のヘッダー伸縮を復活 ( 任意 ).
remove_filter( 'lightning_header_height_changer_enable', 'ltg_fort_header_height_changer_disabel' );
}
add_action( 'init', 'lightning_disable_fort2_header_prefix' );</code></pre></div>
<!-- /wp:loos-hcb/code-block -->
<!-- wp:heading {"className":"is-style-drill-heading-01"} -->
<h2 class="is-style-drill-heading-01" id="vk-htags-5c6d5433-bceb-4122-b817-cc16a9c80d2b">まとめ</h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>この記事では Lightning / Lightning Pro のスキンの一つである Fort II のヘッダーの固定を Origin 風にする方法について解説しました。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>子テーマの functions.php にコードを追記することで可能でした。</p>
<!-- /wp:paragraph -->
<!-- wp:heading {"className":"is-style-drill-heading-01"} -->
<h2 class="is-style-drill-heading-01" id="vk-htags-ec532a88-543a-4f97-883b-8e1a5744a7b9">更新履歴</h2>
<!-- /wp:heading -->
<!-- wp:table -->
<figure class="wp-block-table"><table><thead><tr><th>更新日時</th><th>更新履歴</th></tr></thead><tbody><tr><td>【更新1】2020/05/13</td><td>ヘッダー固定の方法が変わったので記事を更新</td></tr></tbody></table></figure>
<!-- /wp:table -->
http://dev.vkblocks.vektor-inc.co.jp/wp-admin/post.php?post=72&action=edit のログを見たところ、目次ブロックのエラーはコンソールに確認できなかった。
仮説:見出しブロックが壊れてるから、壊れてる?
私のサイトでは VK 見出しは一切使わずコアの見出ししか使ってません。 というか目次以外の VK Blocks は使ってませんね(笑)
var toc_utils_returnHtml = function returnHtml(source, attributes, className) {
var style = attributes.style;
if (!className) {
className = 'vk_tableOfContents';
} else {
className = className + ' vk_tableOfContents';
}
if (style) {
className = className + ' vk_tableOfContents-style-' + style;
}
var countSeparater = '.';
var h2Count = 0;
var h3Count = 0;
var h4Count = 0;
var h5Count = 0;
var h6Count = 0;
var fixZero = function fixZero(count) {
if (count === 0) {
return 1;
}
return count;
};
var returnHtmlContent = '';
if (source) {
returnHtmlContent = source.map(function (data) {
var baseClass = 'vk_tableOfContents_list_item';
var level = data.attributes.level;
var preNumber = '';
if (level === 2) {
h2Count++;
preNumber = h2Count; // Reset
h3Count = 0;
h4Count = 0;
h5Count = 0;
h6Count = 0;
}
if (level === 3) {
h3Count++;
preNumber = h2Count + countSeparater + h3Count; // Reset
h4Count = 0;
h5Count = 0;
h6Count = 0;
}
if (level === 4) {
h4Count++;
preNumber = h2Count + countSeparater + fixZero(h3Count) + countSeparater + h4Count; // Reset
h5Count = 0;
h6Count = 0;
}
if (level === 5) {
h5Count++;
preNumber = h2Count + countSeparater + fixZero(h3Count) + countSeparater + fixZero(h4Count) + countSeparater + h5Count; // Reset
h6Count = 0;
}
if (level === 6) {
h6Count++;
preNumber = h2Count + countSeparater + fixZero(h3Count) + countSeparater + fixZero(h4Count) + countSeparater + fixZero(h5Count) + countSeparater + h6Count;
}
preNumber = preNumber + '. ';
var content = data.attributes.content ? data.attributes.content : data.attributes.title; // この条件分岐がないと見出し配置して文字列が undefinedの時にreplace対象がなくてエディタがクラッシュする
if (content) {
content = content.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g, '');
}
return Object(external_wp_element_["createElement"])("li", {
key: data.clientId,
className: "".concat(baseClass, " ").concat(baseClass, "-h-").concat(level)
}, Object(external_wp_element_["createElement"])("a", {
href: "#".concat(data.attributes.anchor),
className: "".concat(baseClass, "_link")
}, Object(external_wp_element_["createElement"])("span", {
className: "".concat(baseClass, "_link_preNumber")
}, preNumber), content));
});
}
return server_browser_default.a.renderToString(returnHtmlContent); 【🚨ログでハイライトされていた行】
};
// CONCATENATED MODULE: ./src/blocks/_pro/table-of-contents-new/edit.js
function TOCEdit(props) {
var attributes = props.attributes,
setAttributes = props.setAttributes,
className = props.className;
var style = attributes.style,
open = attributes.open,
renderHtml = attributes.renderHtml;
var blockProps = Object(external_wp_blockEditor_["useBlockProps"])({
className: "vk_tableOfContents vk_tableOfContents-style-".concat(style, " tabs")
});
var blocks = hooks_useCurrentBlocks();
var findBlocks = hooks_useBlocksByName('vk-blocks/table-of-contents-new');
Object(external_wp_element_["useEffect"])(function () {
// 投稿に目次ブロックがなければ処理を実行しない
if (!findBlocks) {
return;
}
blocks.forEach(function (block) { 【🚨ログでハイライトされていた行】
var _dispatch = Object(external_wp_data_["dispatch"])('core/block-editor'),
updateBlockAttributes = _dispatch.updateBlockAttributes;
var headingBlocks = ['core/heading', 'vk-blocks/heading'];
var hasInnerBlocks = ['vk-blocks/outer', 'core/cover', 'core/group']; // 見出しにカスタムIDを追加
if (block.attributes.anchor === undefined && isAllowedBlock(block.name, headingBlocks)) {
updateBlockAttributes(block.clientId, {
anchor: "vk-htags-".concat(block.clientId)
}); // InnerBlock内の見出しにカスタムIDを追加
} else if (isAllowedBlock(block.name, hasInnerBlocks)) {
block.innerBlocks.forEach(function (innerBlock) {
// 見出しにカスタムIDを追加
if (innerBlock.attributes.anchor === undefined && isAllowedBlock(innerBlock.name, headingBlocks)) {
updateBlockAttributes(innerBlock.clientId, {
anchor: "vk-htags-".concat(innerBlock.clientId)
});
}
});
} // 目次ブロックをアップデート
if (isAllowedBlock(block.name, ['vk-blocks/table-of-contents-new'])) {
var headings = toc_utils_getHeadings(headingBlocks);
var innerHeadings = toc_utils_getInnerHeadings(headingBlocks, hasInnerBlocks);
var allHeadings = headings.concat(innerHeadings);
var render = toc_utils_returnHtml(allHeadings, block.attributes, className, block.attributes.open);【🚨ログでハイライトされていた行】
updateBlockAttributes(block.clientId, {
renderHtml: render
});
}
});
}, [blocks]);
/* eslint jsx-a11y/label-has-associated-control: 0 */
return server_browser_default.a.renderToString(returnHtmlContent);
var render = toc_utils_returnHtml(allHeadings, block.attributes, className, block.attributes.open);
blocks.forEach(function (block) {
var _dispatch = Object(external_wp_data_["dispatch"])('core/block-editor'),
updateBlockAttributes = _dispatch.updateBlockAttributes;
var headingBlocks = ['core/heading', 'vk-blocks/heading'];
var hasInnerBlocks = ['vk-blocks/outer', 'core/cover', 'core/group']; // 見出しにカスタムIDを追加
if (block.attributes.anchor === undefined && isAllowedBlock(block.name, headingBlocks)) {
updateBlockAttributes(block.clientId, {
anchor: "vk-htags-".concat(block.clientId)
}); // InnerBlock内の見出しにカスタムIDを追加
} else if (isAllowedBlock(block.name, hasInnerBlocks)) {
block.innerBlocks.forEach(function (innerBlock) {
// 見出しにカスタムIDを追加
if (innerBlock.attributes.anchor === undefined && isAllowedBlock(innerBlock.name, headingBlocks)) {
updateBlockAttributes(innerBlock.clientId, {
anchor: "vk-htags-".concat(innerBlock.clientId)
});
}
});
} // 目次ブロックをアップデート
react-dom.min.js:125 TypeError: Cannot read property 'getCurrentStack' of undefined
at pushCurrentDebugStack (webpack:///./node_modules/react-dom/cjs/react-dom-server.browser.development.js?:2665)
at ReactDOMServerRenderer.read (webpack:///./node_modules/react-dom/cjs/react-dom-server.browser.development.js?:3366)
at Object.renderToString (webpack:///./node_modules/react-dom/cjs/react-dom-server.browser.development.js?:3987)
at returnHtml (webpack:///./src/blocks/index.js_+_405_modules?:9906)
at eval (webpack:///./src/blocks/index.js_+_405_modules?:9952)
at Array.forEach (<anonymous>)
at addIdToHeadingAndUpdateTOCHtml (webpack:///./src/blocks/index.js_+_405_modules?:9925)
at eval (webpack:///./src/blocks/index.js_+_405_modules?:9976)
at Bh (react-dom.min.js:126)
at Dj (react-dom.min.js:162)
@here
デベロップメントモードでビルドしていたのが原因。(npm run build:dev
)
プロダクションモードでビルドすると解消(npm run build
)