Проверьте, существуют ли проблемы со страницей


Я создал класс для динамического создания страниц. Я проверяю, существует ли страница, сравнивая заголовок новой страницы с 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' ));

Я предполагаю, что веду себя очень глупо, но я не могу этого понять! Кроме того, будучи новичком в ООП, я был бы рад выслушать критику/указания о том, как я изложил класс.

Приветствия

Author: Richard Sweeney, 2011-10-25

2 answers

Почему вы сравниваете $post->post_name с $this->title? Вы должны сравнивать слизняка с слизняком.

Попробуйте изменить свое сравнение с этого:

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 ) )

Это может помочь вам избежать некоторой путаницы.

 2
Author: Chip Bennett, 2011-10-25 12:04:09

Сначала вам может потребоваться включить заголовок 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';}
 0
Author: T.Todua, 2013-04-09 17:54:55