Проверьте, существуют ли проблемы со страницей
Я создал класс для динамического создания страниц. Я проверяю, существует ли страница, сравнивая заголовок новой страницы с 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' ));
Я предполагаю, что веду себя очень глупо, но я не могу этого понять! Кроме того, будучи новичком в ООП, я был бы рад выслушать критику/указания о том, как я изложил класс.
Приветствия
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 ) )
Это может помочь вам избежать некоторой путаницы.
Сначала вам может потребоваться включить заголовок 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';}