これは最善の解決策ではありませんが、回避策を見つけた方法を説明します。
私にとっては、WordPress Web サイトのデータベースを監視して、Elementor で新しいページを作成したときにすべての変更が発生していることを確認してみました。私が監視したテーブルは次wp_posts
のとおりwp_postmeta
です。wp_
WordPress のインストール時に別の接頭辞を選択した場合は、接頭辞が異なる可能性があることに注意してください。
ページを作成すると、値wp_posts
を持つ新しい行がテーブルに挿入されます。その値を書き留めます (説明のために、 be とします)。post_type
page
post_id
post_id
123
このページのメタデータはwp_postmeta
テーブルに保存され、Elementor は各ページまたは投稿に関連するデータをそこに保存します。phpMyAdmin を使用してそのテーブルにアクセスし、(ページの ID はpost_id = 123
こちら)を持つレコードを検索しました。次のように、(テーブルを選択した後) phpMyAdminの [検索123
] タブを使用できます。wp_postmeta

または、 phpMyAdminのSQL タブで次のようなクエリを実行できます。
SELECT * FROM `wp_postmeta` WHERE `post_id` = 123
これで、ページに添付されたすべてのメタデータ (ID 付き123
) が表示されます。

私の場合、123
以前にこのページ (ID) の Elementor に 1 つのウィジェットを追加していました。したがって、上の画像でわかるように、いくつかのメタデータが添付されています。
これは、Page のTemplate Attribute_wp_page_template = page-fullwidth.php
に を選択したためです。Full Width

そして、ページが Elementor を使用して作成されていることを理解させるには、次の 2 つの値が必要なようです。
_elementor_edit_mode = builder
_elementor_template_type = wp-page
ですから、それは間違いなく必要です。次に、Elementor のバージョン値について:
_elementor_version = 2.9.14
_elementor_pro_version = 2.10.3
定数を使用できます: ELEMENTOR_VERSION
(Elementor プラグインの無料バージョンがあるELEMENTOR_PRO_VERSION
場合) および (Pro バージョン プラグインがある場合)。Elementor プラグインのそれぞれのバージョン (無料またはプロ) がインストールされている場合、これらの定数は既に定義されています。
次に重要な部分です。ウィジェットのデータとレイアウト関連のデータは、:_elementor_data
と_elementor_controls_usage
メタキーに格納されているようです。
の値は_elementor_data
JSON 文字列のようです。したがって、任意のオンライン JSON パーサーを利用して、それが何を持っているかを確認できます。私の場合の値は次のようなものでした:
[{"id":"2e0569b","elType":"section","settings":[],"elements":[{"id":"e2a6dbb","elType":"column","settings":{"_column_size":100,"_inline_size":null},"elements":[{"id":"441552a","elType":"widget","settings":{"tag_ids":"21"},"elements":[],"widgetType":"listings_grid_new"}],"isInner":false}],"isInner":false}]
解析すると、次のようになります。
[
{
"id": "2e0569b",
"elType": "section",
"settings": [],
"elements": [
{
"id": "e2a6dbb",
"elType": "column",
"settings": {
"_column_size": 100,
"_inline_size": null
},
"elements": [
{
"id": "441552a",
"elType": "widget",
"settings": {
"tag_ids": "21"
},
"elements": [],
"widgetType": "listings_grid_new"
}
],
"isInner": false
}
],
"isInner": false
}
]
以前にそのウィジェットを自分のページに追加し、タグ ID 入力ボックスに21
(Elementor Editor を介して) の値を設定したので、それを置き換える新しい値を渡す必要があることがわかりました21
。
次に、_elementor_controls_usage
メタキーが来ます。そして、その値は次のようになりました。
a:3:{s:17:"listings_grid_new";a:3:{s:5:"count";i:1;s:15:"control_percent";i:1;s:8:"controls";a:1:{s:7:"content";a:1:{s:13:"section_query";a:2:{s:7:"loc_ids";i:1;s:7:"tag_ids";i:1;}}}}s:6:"column";a:3:{s:5:"count";i:1;s:15:"control_percent";i:0;s:8:"controls";a:1:{s:6:"layout";a:1:{s:6:"layout";a:1:{s:12:"_inline_size";i:1;}}}}s:7:"section";a:3:{s:5:"count";i:1;s:15:"control_percent";i:0;s:8:"controls";a:0:{}}}
シリアル化されたデータです。そのデータのシリアル化を解除するには、任意のオンライン ツールを使用できます。シリアル化解除後の私の外観は次のとおりです。
array (
'listings_grid_new' =>
array (
'count' => 1,
'control_percent' => 1,
'controls' =>
array (
'content' =>
array (
'section_query' =>
array (
'loc_ids' => 1,
'tag_ids' => 1,
),
),
),
),
'column' =>
array (
'count' => 1,
'control_percent' => 0,
'controls' =>
array (
'layout' =>
array (
'layout' =>
array (
'_inline_size' => 1,
),
),
),
),
'section' =>
array (
'count' => 1,
'control_percent' => 0,
'controls' =>
array (
),
),
)
そして、基本的にはレイアウト関連のデータのようです。なので、この値は編集せずそのまま使うことにしました。
最後の料理をしましょう
ページの作成には、挿入後に new を返すwp_insert_post()メソッドを使用しました。page_id
ページを作成した後、update_post_meta()メソッドを使用してこれを渡しpage_id
、メタデータを添付しました。
私の最終的なコードは次のようになります。
//-- set the new page arguments
$new_page_args = array(
'post_type' => 'page', //-- this is of type 'page'
'post_title' => 'My Dynamic Page', //-- title of the page
'post_status' => 'publish' //-- publish the page
);
//-- insert the page
$new_page_id = wp_insert_post( $new_page_args );
if( is_wp_error( $new_page_id ) )
{
echo 'Unable to create the page!';
die;
}
if( defined( 'ELEMENTOR_VERSION' ) ) //-- if FREE version of Elementor plugin is installed
{
update_post_meta( $new_page_id, '_elementor_version', ELEMENTOR_VERSION );
}
if( defined( 'ELEMENTOR_PRO_VERSION' ) ) //-- if PRO version of Elementor plugin is installed
{
update_post_meta( $new_page_id, '_elementor_pro_version', ELEMENTOR_PRO_VERSION );
}
update_post_meta( $new_page_id, '_wp_page_template', 'page-fullwidth.php' ); //-- for using full width template
//-- for Elementor
update_post_meta( $new_page_id, '_elementor_edit_mode', 'builder' );
update_post_meta( $new_page_id, '_elementor_template_type', 'wp-page' );
//-- Elementor layout
update_post_meta( $new_page_id, '_elementor_controls_usage', 'a:3:{s:17:"listings_grid_new";a:3:{s:5:"count";i:1;s:15:"control_percent";i:1;s:8:"controls";a:1:{s:7:"content";a:1:{s:13:"section_query";a:2:{s:7:"loc_ids";i:1;s:7:"tag_ids";i:1;}}}}s:6:"column";a:3:{s:5:"count";i:1;s:15:"control_percent";i:0;s:8:"controls";a:1:{s:6:"layout";a:1:{s:6:"layout";a:1:{s:12:"_inline_size";i:1;}}}}s:7:"section";a:3:{s:5:"count";i:1;s:15:"control_percent";i:0;s:8:"controls";a:0:{}}}' );
$tag_id = '56'; //-- new value
//-- Elementor data ( I have injected the new $tag_id value in the string )
update_post_meta( $new_page_id, '_elementor_data', '[{"id":"2e0569b","elType":"section","settings":[],"elements":[{"id":"e2a6dbb","elType":"column","settings":{"_column_size":100,"_inline_size":null},"elements":[{"id":"441552a","elType":"widget","settings":{"tag_ids":"'. $tag_id .'"},"elements":[],"widgetType":"listings_grid_new"}],"isInner":false}],"isInner":false}]' );
これは完璧な解決策ではないことに注意してください。しかし、この問題の回避策をどのように見つけたかを説明しました。
たぶん、他の誰かがより良い解決策を投稿しているでしょう。;)