我有一个表单,用于收集有关用户产品的数据,然后使用
在WordPress中创建一个页面$my_post = array(
'post_content' => "My page content",
'post_title' => $product_title,
'post_name' => $product_title,
'post_type' => 'page', // must be 'page' to accept the 'page_template' below
'page_template' => "listing.php",
'post_status' => "publish"
);
$ID = wp_insert_post( $my_post );
$permalink = get_permalink($ID);
echo "<br />ID for new page is $ID, Permalink for new page is $permalink";
表单数据放入页面ID的元变量中,listing.php模板文件将其拉出并构建HTML以显示产品页面。这一切都很好,我可以看到页面元变量_wp_page_template被正确设置到我指定的模板文件,listing.php:
现在我想从相同的表单数据创建第二个页面,这个页面以不同的方式显示数据的不同部分。所以我添加了第二个代码块,从下面的$ my_cert开始,它创建了第二个页面并指定了另一个模板certificate.php,它知道如何构建第二个版本的数据。
$my_post = array(
'post_content' => "My page content",
'post_title' => $product_title,
'post_name' => $product_title,
'post_type' => 'page', // must be 'page' to accept the 'page_template' below
'page_template' => "listing.php",
'post_status' => "publish"
);
$ID = wp_insert_post( $my_post );
$permalink = get_permalink($ID);
echo "<br />ID for new page is $ID, Permalink for new page is $permalink";
$my_cert = array(
'post_content' => "My certificate", // post_content is required
'post_title' => "My certificate", // post_title is required
'post_name' => "My certificate",
'post_type' => 'page', // must be 'page' to accept the 'page_template' below
'page_template' => "certificate.php",
'post_status' => "publish"
);
$CERT_ID = wp_insert_post( $my_cert );
$cert_permalink = get_permalink($CERT_ID);
echo "<br />ID for new certificate is $CERT_ID, Permalink for new certificate is $cert_permalink";
但是当我查看创建的第二个页面的元数据时,模板设置为“default”而不是certificate.php:
我知道我已将certificate.php正确设置为模板(在顶部设置/ *模板名称:证书* /),因为页面编辑模板下拉列表包含证书:
所以有人看到为什么我不能创建第二页,模板设置为certificate.php?
由于
答案 0 :(得分:1)
您确定您的页面模板src:certificate.php是:certificate.php
吗?而不是:templates/certificate.php
或类似的东西。查看主题文件夹,并将其作为页面模板路径的100%。检查拼写或页面模板路径或名称中的拼写错误。它必须完全匹配。
如果您仍有问题,我会查看并调试以下源代码:wp_insert_post()
if ( ! empty( $postarr['page_template'] ) && 'page' == $data['post_type'] ) {
$post->page_template = $postarr['page_template'];
$page_templates = wp_get_theme()->get_page_templates( $post );
if ( 'default' != $postarr['page_template'] && ! isset( $page_templates[ $postarr['page_template'] ] ) ) {
if ( $wp_error ) {
return new WP_Error('invalid_page_template', __('The page template is invalid.'));
}
update_post_meta( $post_ID, '_wp_page_template', 'default' );
} else {
update_post_meta( $post_ID, '_wp_page_template', $postarr['page_template'] );
}
}
所以可能这部分失败了:
if ( 'default' != $postarr['page_template'] && ! isset( $page_templates[ $postarr['page_template'] ] ) )
尝试修改:wp-includes/post.php
并转到行{28}的定义:function wp_insert_post()
。并在行上添加一行:3312以进行调试。
echo '<pre>';
print_r( $page_templates );
echo '</pre>';
die();
确保您的certificate.php
属于该阵列中的decimal(18,6)
。请记住在继续之前删除调试代码。这应该给你一些答案。