在 wordpress Gutenberg 块中调用 DateTimePicker

问题描述 投票:0回答:2

我想这应该是比较容易的,但是我想不通。

我正在使用 React 组件在 JSX 中创建一个自定义的 Gutenberg 块,它有一个我称之为

datetime
的属性。使用该块,您可以选择将保存到数据库并在前端呈现的日期和时间。

使用文档我导入所有依赖项并创建一个

const
像这样:

const MyDateTimePicker = withState( {
    date: new Date(),
} )( ( { date, setState } ) => {
    const settings = __experimentalGetSettings();

    // To know if the current timezone is a 12 hour time with look for an "a" in the time format.
    // We also make sure this a is not escaped by a "/".
    const is12HourTime = /a(?!\\)/i.test(
        settings.formats.time
            .toLowerCase() // Test only the lower case a
            .replace( /\\\\/g, '' ) // Replace "//" with empty strings
            .split( '' ).reverse().join( '' ) // Reverse the string and test for "a" not followed by a slash
    );

    return (
        <DateTimePicker
            currentDate={ date }
            onChange={ ( date ) => setState( { date } ) }
            is12Hour={ is12HourTime }
        />
    );
} );

我的问题是:我怎么称呼它?

我试过

{ MyDateTimePicker }
{ MyDateTimePicker() }
<button onClick={ MyDateTimePicker }>test</button>
。这些似乎都不起作用。

javascript wordpress jsx wordpress-gutenberg
2个回答
1
投票

您需要阅读编辑和保存功能

在编辑时,假设您已经根据需要定义了属性日期时间,您会像这样使用它:

const { Fragment, createElement } = window.wp.element;
const { InspectorControls } = window.wp.editor;
const { Panel, PanelBody, PanelRow, DateTimePicker } = window.wp.components;

export default function edit( { attributes, setAttributes } ) {

  const { datetime } = attributes;

  const onUpdateDate = ( dateTime ) => {
    var newDateTime = moment(dateTime).format( 'YYYY-MM-DD HH:mm' );
    setAttributes( { datetime: newDateTime } );
  };

  return (
    <Fragment>
      <InspectorControls>
        <PanelBody
            title="Some title for the date-tile panel"
            icon=""
            initialOpen={ false }
        >
          <PanelRow>
            <DateTimePicker
                currentDate={ datetime }
                onChange={ ( val ) => onUpdateDate( val ) }
                is12Hour={ true }
            />
          </PanelRow>
        </PanelBody>
      </InspectorControls>
    </Fragment>
  );
}

在保存功能上,您可以像这样轻松显示输出:

const { createElement, Fragment } = window.wp.element;
export default function save( { attributes } ) {

    const { datetime } = attributes;

    return (
        <Fragment>
        { datetime ?
      <div>
        <p>The Date-Time: <span>{datetime}</span></p>
      </div> :
        <p>No date defined</p>
        </Fragment>
    );
}

注意: 上面的示例将在块编辑器右侧面板的面板行中显示日期时间选择器,如果您希望它以不同方式显示或作为某些操作的一部分,您需要有点创意和创建你自己的 React 组件。


-1
投票

有人可以告诉我如何在主题中添加/加载这个 js 文件吗?

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.