在WordPress中创建新页面并自动将其与模板相关联

时间:2016-11-02 作者:laurent

我有三个页面模板,分别是“Simple”、“Front”和“Form”,我想在管理侧栏中添加一个快捷方式,直接创建一个与这些模板关联的页面。因此,下面的“添加新内容”将是:

enter image description here

<我在谷歌上搜索过,但没有找到任何信息。在WordPress中可以这样做吗?

2 个回复
SO网友:GKS

我发现这个问题很有趣,所以下面是我为实现这一点所做的工作。

获取页面模板并将其添加为Post类型页面的子菜单。

function addTemplateAddNewSubMenu() {

    global $submenu;

    // here we are fetching all page template from current activated theme.
    $templates = wp_get_theme()->get_page_templates( \'page\' );

    foreach ( $templates as $filename => $title ) {

        if ( $filename != \'default\' && $filename != \'\' ) {

                // add page-template filename as query string to add new page link.
                $url = \'post-new.php?post_type=page&template=\' . $filename;

                $submenu[\'edit.php?post_type=page\'][] = array( \'Add new \' . $title , \'manage_options\', $url );
        }
    }
}

add_action( \'admin_menu\', \'addTemplateAddNewSubMenu\' );
我已将页面模板作为查询字符串添加到

/wp-admin/post-new.php?post_type=page&template=template-contact.php
通过jQuery和模板查询字符串选择页面模板下拉列表。

add_action( \'admin_head\',\'selectPageTemplate\' );

function selectPageTemplate() {

    global $pagenow;

    if ( $pagenow == \'post-new.php\' ) {

        if ( get_post_type() == \'page\' && isset($_GET[\'template\']) ) {

            $template = $_GET[\'template\']; ?>

            <script>
                jQuery(function($){
                    $(\'#page_template\').val(\'<?php echo $template;?>\');
                });
            </script>

            <?php
        }
    }

}

enter image description here

SO网友:birgire

下面是一个示例,如何通过自定义wpse_page_template 获取参数:

https://examle.tld/wp-admin/post-new.php?post_type=page&wpse_page_template=tpl-test.php
我们可以在save_post_page 钩住并锁定自动拔模状态:

add_action( \'save_post_page\', function (  $post_ID, $post, $update )
{
    // Target \'auto-draft\' status only
    if ( \'auto-draft\' !== get_post_status( $post ) )
        return $post_ID;

    // User input
    $input_tpl = filter_input( INPUT_GET, \'wpse_page_template\', FILTER_SANITIZE_STRING );
    $input_tpl = sanitize_file_name( $input_tpl );

    // Get current page templates
    $page_templates = wp_get_theme()->get_page_templates( $post );

    // Nothing to do if user tries a non a valid page template
    if ( ! isset( $page_templates[$input_tpl] ) )
        return $post_ID;

    // Update the user defined page template
    update_post_meta( $post_ID, \'_wp_page_template\', $input_tpl );

    return $post_ID;

}, 10, 3 );
这种方法可以扩展到WordPress 4.7+中的自定义帖子类型。

相关推荐

显示作者姓名PHP(自制插件)

我有一个需要帮助的问题,因为我自己找不到解决办法。我接管了一个网站,之前有人在那里创建了一个自制插件。。使用默认插件“Contact Form 7”,用户可以在页面上创建帖子。()https://gyazo.com/c8b20adecacd90fb9bfe72ad2138a980 )关于自行创建的插件“Contact Form 7 extender”,帖子是通过PHP代码在后台生成的(https://gyazo.com/115a6c7c9afafd2970b66fd421ca76a3)其工作原理如下:如果