由于WordPress内置日历不支持自定义帖子类型,因此使用第三方版本https://wordpress.org/plugins/cpt-calender-widget/。它根据发布日期而不是使用带有高级自定义字段(ACF)的日期选择器设置的开始和结束日期来提取日期。
尝试更新插件代码https://pastebin.com/0URjDg5Q以取代ACF日期字段。
假设相关代码如下(但可以随意查看pastebin以获取完整代码):
#include <iostream>
#include <vector>
using namespace std;
void Crack(string password, vector<char> Chars)
{
cout<<"PASSWORD TO CRACK: "<<password<<endl;
int n = Chars.size();
int i = 0;
while(true)
{
i++;
int N = 1;
for(int j=0;j<i;j++)N*=n;
for(int j=0;j<N;j++)
{
int K = 1;
string crack = "";
for(int k=0;k<i;k++)
{
crack += Chars[j/K%n];
K *= n;
}
cout<< "Testing PASS: "<<crack<<" "<<"against "<<password<<endl;
if(password.compare(crack) == 0){
cout<<"Cracked password: "<<crack<<endl;
return;
}
}
}
}
int main()
{
vector<char> Chars;
for(char c = '0';c<='z';c++){
if(isalpha(c) || isdigit(c))Chars.push_back(c);
}
Crack("zzzzzzzz", Chars);
}
并根据ACF日期字段将其用于获取即将发生的事件:
// Get days with posts
$dayswithposts = $wpdb->get_results( "SELECT DISTINCT DAYOFMONTH( post_date )
FROM $wpdb->posts WHERE MONTH( post_date ) = '$thismonth'
AND YEAR( post_date ) = '$thisyear'
AND post_type IN ( $post_types ) AND post_status = 'publish'
AND post_date < '" . current_time( 'mysql' ) . '\'', ARRAY_N );
if ( $dayswithposts ) {
foreach ( (array) $dayswithposts as $daywith ) {
$daywithpost[] = $daywith[0];
}
} else {
$daywithpost = array();
是否有一种简单的方法让插件代码使用相关的ACF代码? ACF非常符合逻辑,但不熟悉直接调用数据库的日历插件方法。需要注意的是,这种用法寻找相对相同,但不相信找到答案:WORDPRESS: Calendar with custom post type + custom fields。需要注意的是,如果有更简单的方法可以使用原生的get_calendar打开它。
答案 0 :(得分:1)
我要做的是修改自定义帖子类型以使其发布,即使它只是预定的,也可以将发布日期用作事件日期。
/* set to publish even if scheduled and show future date */
remove_action('future_post', '_future_post_hook');
add_filter( 'wp_insert_post_data', 'futurenow_do_not_set_posts_to_future' );
function futurenow_do_not_set_posts_to_future( $data ) {
if( ! is_singular( array('events') ) )
if ( $data['post_status'] == 'future' && $data['post_type'] == 'events' )
$data['post_status'] = 'publish';
return $data;
}
答案 1 :(得分:0)
我不知道你为什么使用这些
date_upcoming_clause,date_start_clause,'date_end_clause
字段只是使用
直接自定义字段(meta_key
和meta_value
),例如event_start_date
和event_end_date
,并加入postmeta
table to posts table你将得到你想要的确切结果。
`"SELECT * "
. "FROM $wpdb->posts wpposts";
$sql1 .= "JOIN $wpdb->postmeta pm ON (wpposts.ID = pm.post_id)
WHERE post_type = 'your_custom_post_type' AND post_status = 'publish'
AND pm.meta_key = 'event_start_date'
AND pm.meta_value = 20180423
OR pm.meta_key ='event_end_date'
AND pm.meta_value=20180425
";`