检查页面是否存在问题

时间:2011-10-25 作者:Richard Sweeney

我创建了一个类来动态创建页面。通过将新页面的标题与post_name. 这个比较似乎很有效,但即使有匹配项,页面也会被创建,我不知道为什么。

我的代码如下所示:

class createDynamicPage {

public function __construct( $nameArray ) {
    $this->title = $nameArray[\'title\']; //Title of the page
    $this->slug = $nameArray[\'slug\']; //Page slug
}

public $pageContent = \'\';

public function rps_createPage(){
    $allPages = get_pages();
    $exists = false;
    foreach( $allPages as $page ){
        if( strtolower( $page->post_name ) == strtolower( $this->title ) ){
            $exists = true;
        }
    }
    if( $exisits == false ) {
        $new_page_id = wp_insert_post(
            array(
                \'post_title\' => $this->title,
                \'post_type\'     => \'page\',
                \'post_name\'  => $this->slug,
                \'comment_status\' => \'closed\',
                \'ping_status\' => \'closed\',
                \'post_content\' => $this->pageContent,
                \'post_status\' => \'publish\',
                \'post_author\' => 1,
                \'menu_order\' => 0
            )
        );
    }
}

}

$cdArray = array( \'title\' => \'Biography\', \'slug\' => \'concert-diary\' );
$pageConcertDiary = new createDynamicPage( $cdArray );
add_action(\'init\', array( &$pageConcertDiary, \'rps_createPage\' ));
我想我很笨,但我想不出来!此外,作为一名OOP新手,我很乐意接受批评/指点,说明我是如何概述课程的。

干杯

2 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

你为什么要比较$post->post_name$this->title? 您应该将slug与slug进行比较。

尝试更改以下比较:

if( strtolower( $page->post_name ) == strtolower( $this->title ) )
。。。对此:

if( strtolower( $page->post_name ) == strtolower( $this->slug ) )
此外,我可能建议您在动态创建的页面中遵守WordPress对象约定,因为这样做可能有助于避免这种混淆。

我会改变这一点:

$cdArray = array( \'title\' => \'Biography\', \'slug\' => \'concert-diary\' );
。。。对此:

$cdArray = array( \'title\' => \'Biography\', \'post_name\' => \'concert-diary\' );
然后更改此选项:

public function __construct( $nameArray ) {
    $this->title = $nameArray[\'title\']; //Title of the page
    $this->slug = $nameArray[\'slug\']; //Page slug
}
。。。对此:

public function __construct( $nameArray ) {
    $this->title = $nameArray[\'title\']; //Title of the page
    $this->post_name = $nameArray[\'post_name\']; //Page slug
}
因此,您的比较变成:

if( strtolower( $page->post_name ) == strtolower( $this->post_name ) )
这可能会帮助您避免一些混淆。

SO网友:T.Todua

首先,您可能需要包含wp博客标题。然后使用此选项检查帖子是否已经存在(您可以修改它以适应页面):

$title = \'mytitlee\';

global $wpdb;
$id_ofpost_name = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = \'$title\'");
$id_ofpost_title = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_title = \'$title\'");
if ($id_ofpost_name || $id_ofpost_title) {echo \'Exists, here is the id:\'.$id_ofpost_title.\' or \'.$id_ofpost_name;} 
else {echo \'post wasnt found\';}

结束

相关推荐

WP_LINK_PAGES输出出现两次

我认为这与所问的问题完全不同here.我正在使用过滤器挂钩向主题添加分页。输出显示在内容的开头和结尾,而不仅仅是结尾。我的函数,在模板的函数中。php文件:add_filter(\'the_content\',\'pagination_after_post\',1); /** * Adds pagination after the post * * @uses is_single() */ function pagination_after