由于一些自定义软件集成,我让我的主题使用设置的模板自动生成一些页面,以实现所需的功能。
我使用以下脚本来实现这一点:(页面名称是虚构的,但很真实)
function xc_add_custom_pages() {
// Get pages list, function below
$pageList = xc_get_custom_page_list();
foreach ($pageList as $customPage)
{
// Check page existence
if( !empty($customPage[\'title\'])
&& !empty($customPage[\'template\'])
&& !get_page_by_title($customPage[\'title\'])) {
$pageParams = array(
\'post_type\' => \'page\',
\'post_title\' => $customPage[\'title\'],
\'post_content\' => \'\',
\'post_status\' => \'publish\',
\'post_author\' => 1
);
// Set sutom slug if required
if ($customPage[\'slug\']) {
$pageParams[\'post_name\'] = $customPage[\'slug\'];
}
// Set sutom template if required
if ($customPage[\'template\']) {
$pageParams[\'page_template\'] = $customPage[\'template\'];
}
// Create the page
$customPage[\'id\'] = wp_insert_post( $pageParams );
}
}
}
add_action(\'after_setup_theme\', \'xc_add_custom_pages\');
function xc_get_custom_page_list() {
return array(
array(
\'title\' => \'Product registration\',
\'template\' => \'page-templates/tpl-regprod.php\',
\'slug\' => \'product-registration\'
),
array(
\'title\' => \'Private area\',
\'template\' => \'page-templates/tpl-private-area.php\',
\'slug\' => \'private-area\'
),
array(
\'title\' => \'Assistance report\',
\'template\' => \'page-templates/tpl-asst-report.php\',
\'slug\' => \'assistance-report\'
),
// more pages...
);
}
昨天已经创建了页面,直到今天都可以在列表中看到。今天,我发现包括自定义页面在内的总页面数正确,但无论我单击什么过滤器(“包括所有”),我都只能看到在脚本之前创建的页面。
我甚至试着点击
Tutti
(全部)并切换到
All languages
在WPML中,但我被送回了11个意大利语页面。我的自定义页面似乎“没有语言”,但我不应该在中看到它们吗
All languages
然后
为什么页面“取消列表”?有没有办法把它们列出来?提前感谢您的时间。祝你今天愉快!
最合适的回答,由SO网友:GigiSan 整理而成
问题实际上是页面“没有语言”,WPML似乎讨厌这样。
因此,我只是删除了所有这些页面,并使用适当的WPML语言属性重新插入它们:
// (...)
// Create the page
$customPage[\'id\'] = wp_insert_post( $pageParams );
// Check if WPML parameters are needed
if (has_action(\'wpml_set_element_language_details\')) {
// Set WPML parameters
$set_language_args = array(
\'element_id\' => $customPage[\'id\'],
\'element_type\' => apply_filters( \'wpml_element_type\', \'page\' ),
\'trid\' => FALSE, // new translation id
\'language_code\' => \'it\',
\'source_language_code\' => NULL
);
do_action( \'wpml_set_element_language_details\', $set_language_args );
}
这解决了我的问题。