Я добавил в свой блок два RichText
компонента.
registerBlockType( 'hallmark/gray-content-container', {
title: __( 'Gray Content Container' ),
icon: 'grid-view',
category: 'hallmark-blocks',
keywords: [
__( 'Hallmark gray content' ),
__( 'Hallmark' ),
__( 'Gray content container' ),
],
attributes:{
contentHeading: {
type: 'string',
source: 'children',
selector: 'h1,h2,h3,h4,h5,h6'
},
textContent: {
type: 'string'
}
},
edit: function( props ) {
var textContent = props.attributes.textContent;
var contentHeading = props.attributes.contentHeading;
function onChangeTextContent( content ) {
props.setAttributes( { textContent: content } );
}
function onChangeHeading (heading) {
props.setAttributes( { contentHeading: heading} );
}
return (
<div className={ props.className }>
<label className="editor-content-section-label">Content for gray section</label>
<RichText
tagName="h1"
value={contentHeading}
onChange={onChangeHeading}
placeholder={ __( 'Add a heading' ) }
keepPlaceholderOnFocus
/>
<RichText
tagName="p"
className={props.className}
onChange={onChangeTextContent}
value={textContent}
placeholder={ __( 'Add content' ) }
keepPlaceholderOnFocus
/>
</div>
);
},
save: function( props ) {
//return null;
return(
<div className={props.className}>
<div className="gray-bg">
<div className="constrain content">
<RichText.Content tagName="h1" value={ attributes.contentHeading } />
<RichText.Content tagName="p" value={ attributes.textContent } />
</div>
</div>
</div>
);
},
} );
Я пробовал два разных подхода к сохранению данных.
Использование функции save()
по умолчанию
save: function( props ) {
return(
<div className={props.className}>
<div className="gray-bg">
<div className="constrain content">
<RichText.Content tagName="h1" value={ attributes.contentHeading } />
<RichText.Content tagName="p" value={ attributes.textContent } />
</div>
</div>
</div>
);
},
Сохранение в PHP:
Использование метода render_callback
(Использование return null;
из функции save()
по умолчанию блока.
register_block_type( 'hallmark/white-content-container', array(
'render_callback' => 'hall_render_white_content'
) );
function hall_render_white_content( $atts ) {
$heading = $atts['contentHeading'];
$raw_content = $atts['textContent'];
$full_content = $heading . $raw_content;
// var_dump($full_content);
$content = hall_clean_shortcode_block_content( $full_content );
return '<div class="gray-bg"><div class="constrain content">' . $content . '</div></div>';
}
Элемент atts['contentHeading']
вообще не существует в массиве $atts
. Когда я проверяю var_dump( $attas );
, присутствует textContent
element.
Проблема в том, что оба подхода сохраняют только textContent
. contentHeading
совсем не спасает.
Что мне не хватает?
console.log(props.attributes)
внутри вашей функции редактирования и наблюдайте, изменяются ли значенияcontentHeading
при редактировании.edit()
функция будет вызываться каждый раз при изменении состояния или свойств компонента. По моему счастливому предположению, источникомcontentHeading
должен быть «текст», а не «дети». - person Mehmood Ahmad   schedule 05.03.2019render_callback
. Моя функцияfunction hall_render_gray_content( $atts ) {...}
. Но он никогда не получает значение$atts['contentHeading'];
, даже когда он у меня есть. Когда я пытаюсь это сделать, появляется красноеPublish error
уведомление. Что может быть причиной? - person Subrata Sarkar   schedule 05.03.2019serverSideRendering
до сих пор. Я выяснил, что в основном нам не нужноserverSideRendering
. Не могли бы вы объяснить, почему вы это используете, чтобы мы могли обсудить, нужно ли вам это или нет. Нам нужен рендеринг на стороне сервера только тогда, когда наш живой контент меняется со временем, как и наши последние сообщения, если контент статичен и нам нужно только редактировать его из бэкэнда, тогда нет необходимости в рендеринге на стороне сервера. - person Mehmood Ahmad   schedule 05.03.2019serverSideRendering
. Я написал подход в моем исходном вопросе, помеченном как Сохранение его в PHP. - person Subrata Sarkar   schedule 05.03.2019setAttributes
. Вы уверены, что делаете это? - person Mehmood Ahmad   schedule 07.03.2019