handling free post description

This commit is contained in:
Antoine M 2024-08-12 14:40:27 +02:00
parent 6e36cf485e
commit 23d927e0b7
9 changed files with 101 additions and 25 deletions

View File

@ -22,6 +22,13 @@
"postType": { "postType": {
"type": "string", "type": "string",
"default": "conseils" "default": "conseils"
},
"hasDescription": {
"type": "boolean",
"default": false
},
"postDescription": {
"type": "string"
} }
} }
} }

View File

@ -1 +1 @@
<?php return array('dependencies' => array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n'), 'version' => '831260fc67b39b194bb9'); <?php return array('dependencies' => array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n'), 'version' => '354aaf4f576100a5c65a');

View File

@ -39,6 +39,8 @@ __webpack_require__.r(__webpack_exports__);
function OptionsSelectControl({ function OptionsSelectControl({
setAttributes, setAttributes,
relatedPostId, relatedPostId,
postDescription,
hasDescription,
postType postType
}) { }) {
if (!postType || !setAttributes) return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", null, "Loading"); if (!postType || !setAttributes) return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", null, "Loading");
@ -70,6 +72,11 @@ function OptionsSelectControl({
} }
return c_value; return c_value;
} }
function handleHasDescriptionChange(hasDescription) {
setAttributes({
hasDescription
});
}
function handleRelatedPostChange(postId) { function handleRelatedPostChange(postId) {
setAttributes({ setAttributes({
relatedPostId: Number(postId) relatedPostId: Number(postId)
@ -133,10 +140,18 @@ function OptionsSelectControl({
value: relatedPostId, value: relatedPostId,
options: postOptions, options: postOptions,
onChange: e => handleRelatedPostChange(e) onChange: e => handleRelatedPostChange(e)
}), relatedPostId && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__.Tip, null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Pour modifier le contenu de la question affichée ici, rendez-vous dans la fiche question correspondante.", "homegrade-blocks")), relatedPostId && editUrl && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", { }), relatedPostId && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__.Tip, null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Pourrrrrr modifier le contenu de la question affichée ici, rendez-vous dans la fiche question correspondante.", "homegrade-blocks")), relatedPostId && editUrl && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", {
href: editUrl, href: editUrl,
className: "edit-question-button" className: "edit-question-button"
}, "\xC9diter le post"))); }, "\xC9diter le post")), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__.PanelBody, {
title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Texte descriptif", "homegrade-blocks"),
initialOpen: false
}, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__.CheckboxControl, {
label: "Texte descriptif",
help: "\xC0 cocher pour afficher un texte descriptif libre",
checked: hasDescription,
onChange: handleHasDescriptionChange
})));
} }
/***/ }), /***/ }),
@ -160,13 +175,11 @@ __webpack_require__.r(__webpack_exports__);
/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./editor.scss */ "./src/editor.scss"); /* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./editor.scss */ "./src/editor.scss");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); /* harmony import */ var _wordpress_html_entities__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/html-entities */ "@wordpress/html-entities");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _wordpress_html_entities__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_html_entities__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _wordpress_html_entities__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/html-entities */ "@wordpress/html-entities"); /* harmony import */ var _OptionsSelectControl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./OptionsSelectControl */ "./src/OptionsSelectControl.js");
/* harmony import */ var _wordpress_html_entities__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_html_entities__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _wordpress_core_data__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @wordpress/core-data */ "@wordpress/core-data");
/* harmony import */ var _OptionsSelectControl__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./OptionsSelectControl */ "./src/OptionsSelectControl.js"); /* harmony import */ var _wordpress_core_data__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_wordpress_core_data__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var _wordpress_core_data__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @wordpress/core-data */ "@wordpress/core-data");
/* harmony import */ var _wordpress_core_data__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_wordpress_core_data__WEBPACK_IMPORTED_MODULE_8__);
@ -176,14 +189,15 @@ __webpack_require__.r(__webpack_exports__);
function Edit({ function Edit({
attributes, attributes,
setAttributes setAttributes
}) { }) {
const { const {
relatedPostId, relatedPostId,
postType postType,
hasDescription,
postDescription
} = attributes; } = attributes;
const currentRelatedPost = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_3__.useSelect)(select => relatedPostId && postType ? select("core").getEntityRecord("postType", postType, relatedPostId) : null, [relatedPostId, postType]); const currentRelatedPost = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_3__.useSelect)(select => relatedPostId && postType ? select("core").getEntityRecord("postType", postType, relatedPostId) : null, [relatedPostId, postType]);
const post = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_3__.useSelect)(select => select("core").getEntityRecord("postType", postType, relatedPostId)); const post = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_3__.useSelect)(select => select("core").getEntityRecord("postType", postType, relatedPostId));
@ -204,9 +218,16 @@ function Edit({
return (_media$source_url = media?.source_url) !== null && _media$source_url !== void 0 ? _media$source_url : null; return (_media$source_url = media?.source_url) !== null && _media$source_url !== void 0 ? _media$source_url : null;
}, [postParentTaxonomy]); }, [postParentTaxonomy]);
const postTypeDatas = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_3__.useSelect)(select => select("core").getEntityConfig("postType", postType)); const postTypeDatas = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_3__.useSelect)(select => select("core").getEntityConfig("postType", postType));
return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_OptionsSelectControl__WEBPACK_IMPORTED_MODULE_7__["default"], { function handlePostDescriptionChange(description) {
setAttributes({
postDescription: description
});
}
return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_OptionsSelectControl__WEBPACK_IMPORTED_MODULE_6__["default"], {
relatedPostId: relatedPostId, relatedPostId: relatedPostId,
postType: postType, postType: postType,
hasDescription: hasDescription,
postDescription: postDescription,
setAttributes: setAttributes setAttributes: setAttributes
}), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { }), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__.useBlockProps)({ ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__.useBlockProps)({
@ -226,7 +247,12 @@ function Edit({
class: "tag post-type-tag" class: "tag post-type-tag"
}, postTypeDatas.label)), currentRelatedPost && currentRelatedPost.title && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("h2", { }, postTypeDatas.label)), currentRelatedPost && currentRelatedPost.title && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("h2", {
class: "post-card__title" class: "post-card__title"
}, (0,_wordpress_html_entities__WEBPACK_IMPORTED_MODULE_6__.decodeEntities)(currentRelatedPost.title.rendered))), !relatedPostId && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Ce bloc n'est relié à aucun post. Rattachez-le à un post dans la barre latérale.", "homegrade-blocks__texte-backoffice"))))); }, (0,_wordpress_html_entities__WEBPACK_IMPORTED_MODULE_5__.decodeEntities)(currentRelatedPost.title.rendered)), hasDescription && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__.RichText, {
tagName: "p",
onChange: handlePostDescriptionChange // Store updated content as a block attribute
,
placeholder: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Heading...") // Insérez votre description
})), !relatedPostId && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Ce bloc n'est relié à aucun post. Rattachez-le à un post dans la barre latérale.", "homegrade-blocks__texte-backoffice")))));
} }
/***/ }), /***/ }),
@ -388,7 +414,7 @@ module.exports = window["wp"]["i18n"];
\************************/ \************************/
/***/ ((module) => { /***/ ((module) => {
module.exports = /*#__PURE__*/JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"homegrade-content-blocks/post-card","version":"0.1.0","title":"Post Link","category":"homegrade-blocks","description":"Pour afficher le lien vers un post (conseil, fiche-info, …) dans une carte","supports":{"anchor":true,"html":false},"textdomain":"homegrade-theme__bloks-texte-fonctionnel","editorScript":"file:./index.js","editorStyle":"file:./index.css","style":"file:./style-index.css","render":"file:./render.php","attributes":{"relatedPostId":{"type":"number"},"postType":{"type":"string","default":"conseils"}}}'); module.exports = /*#__PURE__*/JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"homegrade-content-blocks/post-card","version":"0.1.0","title":"Post Link","category":"homegrade-blocks","description":"Pour afficher le lien vers un post (conseil, fiche-info, …) dans une carte","supports":{"anchor":true,"html":false},"textdomain":"homegrade-theme__bloks-texte-fonctionnel","editorScript":"file:./index.js","editorStyle":"file:./index.css","style":"file:./style-index.css","render":"file:./render.php","attributes":{"relatedPostId":{"type":"number"},"postType":{"type":"string","default":"conseils"},"hasDescription":{"type":"boolean","default":false},"postDescription":{"type":"string"}}}');
/***/ }) /***/ })

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,4 @@
<?php <?php
$relatedPostId = $attributes['relatedPostId'] ?? null; $relatedPostId = $attributes['relatedPostId'] ?? null;
$postType = get_post_type_object(get_post_type($relatedPostId)); $postType = get_post_type_object(get_post_type($relatedPostId));
@ -14,11 +12,12 @@ $mainThematique = getMainThematique($thematique);
$thematiqueColorSlug = $mainThematique->slug; $thematiqueColorSlug = $mainThematique->slug;
$thematique_icon = get_field('taxonomy_pictures', 'thematiques' . '_' . $mainThematique->term_id)['icon']; $thematique_icon = get_field('taxonomy_pictures', 'thematiques' . '_' . $mainThematique->term_id)['icon'];
$postDescription = $attributes['postDescription'];
$coverUrl = $postType->name === 'videos-webinaires' && $postThumbnail ? $postThumbnail : ($thematique_icon ? $thematique_icon['url'] : null); $coverUrl = $postType->name === 'videos-webinaires' && $postThumbnail ? $postThumbnail : ($thematique_icon ? $thematique_icon['url'] : null);
?> ?>
<a class="post-card" href="<?php echo $relatedPostUrl ?>" target="<?php echo $target ?>"> <a class="post-card" href="<?php echo $relatedPostUrl ?>">
<img class="post-card__cover post-card__cover--<?php echo $postType->name ?>" src="<?php echo $coverUrl ?>" alt=""> <img class="post-card__cover post-card__cover--<?php echo $postType->name ?>" src="<?php echo $coverUrl ?>" alt="">
@ -30,5 +29,9 @@ $coverUrl = $postType->name === 'videos-webinaires' && $postThumbnail ? $postTh
<div class="tag post-type-tag"><?php echo $postType->label ?></div> <div class="tag post-type-tag"><?php echo $postType->label ?></div>
</div> </div>
<h2 class="post-card__title"><?php echo $relatedPost->post_title ?></h2> <h2 class="post-card__title"><?php echo $relatedPost->post_title ?></h2>
<?php if ($postDescription): ?>
<p><?php echo $postDescription ?></p>
<?php endif; ?>
<p></p>
</div> </div>
</a> </a>

View File

@ -6,7 +6,7 @@ import {
ComboboxControl, ComboboxControl,
} from "@wordpress/components"; } from "@wordpress/components";
import "./editor.scss"; import "./editor.scss";
import { Tip } from "@wordpress/components"; import { Tip, CheckboxControl } from "@wordpress/components";
import { useSelect } from "@wordpress/data"; import { useSelect } from "@wordpress/data";
import { useEffect, useState } from "@wordpress/element"; import { useEffect, useState } from "@wordpress/element";
@ -15,6 +15,8 @@ import { decodeEntities } from "@wordpress/html-entities";
export default function OptionsSelectControl({ export default function OptionsSelectControl({
setAttributes, setAttributes,
relatedPostId, relatedPostId,
postDescription,
hasDescription,
postType, postType,
}) { }) {
if (!postType || !setAttributes) return <p>Loading</p>; if (!postType || !setAttributes) return <p>Loading</p>;
@ -54,6 +56,10 @@ export default function OptionsSelectControl({
return c_value; return c_value;
} }
function handleHasDescriptionChange(hasDescription) {
setAttributes({ hasDescription });
}
function handleRelatedPostChange(postId) { function handleRelatedPostChange(postId) {
setAttributes({ relatedPostId: Number(postId) }); setAttributes({ relatedPostId: Number(postId) });
} }
@ -112,7 +118,7 @@ export default function OptionsSelectControl({
{relatedPostId && ( {relatedPostId && (
<Tip> <Tip>
{__( {__(
"Pour modifier le contenu de la question affichée ici, rendez-vous dans la fiche question correspondante.", "Pourrrrrr modifier le contenu de la question affichée ici, rendez-vous dans la fiche question correspondante.",
"homegrade-blocks", "homegrade-blocks",
)} )}
</Tip> </Tip>
@ -123,6 +129,17 @@ export default function OptionsSelectControl({
</a> </a>
)} )}
</PanelBody> </PanelBody>
<PanelBody
title={__("Texte descriptif", "homegrade-blocks")}
initialOpen={false}
>
<CheckboxControl
label="Texte descriptif"
help="À cocher pour afficher un texte descriptif libre"
checked={hasDescription}
onChange={handleHasDescriptionChange}
/>
</PanelBody>
</InspectorControls> </InspectorControls>
); );
} }

View File

@ -22,6 +22,13 @@
"postType": { "postType": {
"type": "string", "type": "string",
"default": "conseils" "default": "conseils"
},
"hasDescription": {
"type": "boolean",
"default": false
},
"postDescription": {
"type": "string"
} }
} }
} }

View File

@ -3,15 +3,15 @@ import { useBlockProps } from "@wordpress/block-editor";
import { useSelect } from "@wordpress/data"; // pour les querry import { useSelect } from "@wordpress/data"; // pour les querry
import "./editor.scss"; import "./editor.scss";
import { RawHTML } from "@wordpress/element";
import { useEffect } from "@wordpress/element";
import { decodeEntities } from "@wordpress/html-entities"; import { decodeEntities } from "@wordpress/html-entities";
import OptionsSelectControl from "./OptionsSelectControl"; import OptionsSelectControl from "./OptionsSelectControl";
import { RichText } from "@wordpress/block-editor";
import { useEntityProp } from "@wordpress/core-data"; import { useEntityProp } from "@wordpress/core-data";
export default function Edit({ attributes, setAttributes }) { export default function Edit({ attributes, setAttributes }) {
const { relatedPostId, postType } = attributes; const { relatedPostId, postType, hasDescription, postDescription } =
attributes;
const currentRelatedPost = useSelect( const currentRelatedPost = useSelect(
(select) => (select) =>
@ -61,12 +61,17 @@ export default function Edit({ attributes, setAttributes }) {
const postTypeDatas = useSelect((select) => const postTypeDatas = useSelect((select) =>
select("core").getEntityConfig("postType", postType), select("core").getEntityConfig("postType", postType),
); );
function handlePostDescriptionChange(description) {
setAttributes({ postDescription: description });
}
return ( return (
<> <>
<OptionsSelectControl <OptionsSelectControl
relatedPostId={relatedPostId} relatedPostId={relatedPostId}
postType={postType} postType={postType}
hasDescription={hasDescription}
postDescription={postDescription}
setAttributes={setAttributes} setAttributes={setAttributes}
/> />
@ -75,7 +80,6 @@ export default function Edit({ attributes, setAttributes }) {
className: `post-card`, className: `post-card`,
})} })}
> >
{/* postParentTaxonomy */}
<img class="post-card__cover" alt="" src={thematiqueCoverUrl} /> <img class="post-card__cover" alt="" src={thematiqueCoverUrl} />
<div class="post-card__details"> <div class="post-card__details">
<div class="post-card__tags"> <div class="post-card__tags">
@ -98,6 +102,13 @@ export default function Edit({ attributes, setAttributes }) {
{decodeEntities(currentRelatedPost.title.rendered)} {decodeEntities(currentRelatedPost.title.rendered)}
</h2> </h2>
)} )}
{hasDescription && (
<RichText
tagName="p"
onChange={handlePostDescriptionChange} // Store updated content as a block attribute
placeholder={__("Heading...")} // Insérez votre description
/>
)}
</div> </div>
{!relatedPostId && ( {!relatedPostId && (
<> <>

View File

@ -12,6 +12,7 @@ $mainThematique = getMainThematique($thematique);
$thematiqueColorSlug = $mainThematique->slug; $thematiqueColorSlug = $mainThematique->slug;
$thematique_icon = get_field('taxonomy_pictures', 'thematiques' . '_' . $mainThematique->term_id)['icon']; $thematique_icon = get_field('taxonomy_pictures', 'thematiques' . '_' . $mainThematique->term_id)['icon'];
$postDescription = $attributes['postDescription'];
$coverUrl = $postType->name === 'videos-webinaires' && $postThumbnail ? $postThumbnail : ($thematique_icon ? $thematique_icon['url'] : null); $coverUrl = $postType->name === 'videos-webinaires' && $postThumbnail ? $postThumbnail : ($thematique_icon ? $thematique_icon['url'] : null);
@ -28,5 +29,9 @@ $coverUrl = $postType->name === 'videos-webinaires' && $postThumbnail ? $postTh
<div class="tag post-type-tag"><?php echo $postType->label ?></div> <div class="tag post-type-tag"><?php echo $postType->label ?></div>
</div> </div>
<h2 class="post-card__title"><?php echo $relatedPost->post_title ?></h2> <h2 class="post-card__title"><?php echo $relatedPost->post_title ?></h2>
<?php if ($postDescription): ?>
<p><?php echo $postDescription ?></p>
<?php endif; ?>
<p></p>
</div> </div>
</a> </a>