自定义帖子类型在函数.php中注册时可用,但在插件中注册时不可用

时间:2019-08-07 作者:dan webb

我正在创建一个插件,该插件注册一个名为“news articles”的自定义帖子类型。请参见下面的代码类:

<?php
/**
 * This plugin class is used to register the necessary custom post types
*/
class Dw_Mf_Register_CPT {

/**
 * Register Custom Post Types
 *
 * @since 1.0.0
 * @access public
 * @return void
 */
public function register_cpt(){
    add_action( \'init\', array( $this, \'create_news_article_cpt\') );
}

/**
 * Add News Article Custom Post Type
 *
 * @since 1.0.0
 * @access public
 * @return void
 */
public function create_news_article_cpt(){

    $supports = array(
        \'title\', // post title
        \'editor\', // post content
        \'author\', // post author
        \'thumbnail\', // featured images
        \'excerpt\', // post excerpt
        \'custom-fields\', // custom fields
        \'comments\', // post comments
        \'revisions\', // post revisions
        \'post-formats\', // post formats
        );
        $labels = array(
        \'name\' => _x(\'news articles\', \'plural\'),
        \'singular_name\' => _x(\'news article\', \'singular\'),
        );
        $args = array(
        \'supports\' => $supports,
        \'labels\' => $labels,
        \'public\' => true,
        \'query_var\' => true,
        \'rewrite\' => array(\'slug\' => \'news-articles\'),
        \'has_archive\' => true,
        \'hierarchical\' => false,
        );
        register_post_type(\'news articles\', $args);
}
}
它在后端工作。我可以在菜单中看到自定义帖子类型,并且可以创建新的新闻文章。

然而,当我试图查看这些新闻文章时,我被301重定向到主页。

当我从PHP类上下文中删除相同的代码并将其直接放入函数中时。php作为一个标准的php函数,并注册它按预期工作的自定义帖子类型,我可以查看我在网站前面创建的新闻文章,而无需将它们重定向到主页。

//functions.php code
function create_post_type_news() {
$supports = array(
    \'title\', // post title
    \'editor\', // post content
    \'author\', // post author
    \'thumbnail\', // featured images
    \'excerpt\', // post excerpt
    \'custom-fields\', // custom fields
    \'comments\', // post comments
    \'revisions\', // post revisions
    \'post-formats\', // post formats
    );
    $labels = array(
    \'name\' => _x(\'news articles\', \'plural\'),
    \'singular_name\' => _x(\'news article\', \'singular\'),
    );
    $args = array(
    \'supports\' => $supports,
    \'labels\' => $labels,
    \'public\' => true,
    \'query_var\' => true,
    \'rewrite\' => array(\'slug\' => \'news-articles\'),
    \'has_archive\' => true,
    \'hierarchical\' => false,
    );
    register_post_type(\'news articles\', $args);
}
add_action(\'init\', \'create_post_type_news\');
理想情况下,这将在插件中工作,并且我不需要在函数中注册CPT。php文件。对问题所在有何见解?

1 个回复
SO网友:Peter HvD

你的班级没有__construct() 方法

  • 即使这样,你也不是在给班级打电话来设置它,所以。。。

    1) 在类的顶部,添加:

    function __construct() {
        register_cpt();
    }
    
    2)课后,添加:

    $myCPT = new Dw_Mf_Register_CPT();
    
    或者,您可以完全取消类构造。如果插件所做的只是添加CPT,那么实际上并不需要它。

  • 相关推荐

    Ajax is not working in a loop

    我试图使用ajax显示与所选类别相关的数据。它仅适用于最后选定的术语,而不适用于所有选定的术语。任何帮助都将不胜感激。var selected_cat = $(\'#my-categorychecklist input:checked\').map(function() { return this.value }).get(); $(document).ready( function () { var getid = $(\'#my